zoukankan      html  css  js  c++  java
  • python中的namespace

     python中的名称空间是名称(标识符)到对象的映射。

    具体来说,python为模块、函数、类、对象保存一个字典(__dict__),里面就是重名称到对象的映射。

    可以参看下面python程序的输出:

    print('globals:')
    print(globals().keys())
    print('')
    x = 1
    print('globals after definition of x:')
    print(globals().keys())
    print('')
    if x == 1:
        y = 2
        z = 3
        print('globals inside if :%s' % (globals().keys()))
        print('locals inside if: %s' % (locals().keys()))
        del y
        print('locals after del: %s' % (locals().keys()))
    

    而在面向对象编程中,python与C++最大的差别之一就在于python中的namespace是可以动态变化的,类的成员,类实例的成员都可以动态添加,所做的不过是在相应的namespace字典中添加一项。这里特别指出的值,函数(成员函数或全局函数)也有自己的namespace字典,甚至可以动态添加

    class Test1(object):
        x = 1
        def __init__(self):
            self.y =  2
            self.z = 3
        def func(self):
            print('test')
        func.fx = 2
    print(Test1.__dict__)
    t1 = Test1()
    print(t1.__dict__)
    print(t1.func.__dict__)
    

     由此,我们可以理解一下,python中所谓的构造函数__init__所做的事情了,因为成员方法第一个传入的是self引用,相当于

    t1 = Test1()的时候调用Test1.__init__(t1),然后在构造函数里面添加了类实例t1的namespace字典项

  • 相关阅读:
    Java开发系列-电子邮箱
    Java开发系列-文件上传
    iOS开发系列-常见离线存储方式
    Java开发系列-注解
    Java开发系列-JSP
    Java开发系列-Cookie与Session会话技术
    Java开发系列-JDBC
    Java开发系列-MySQL
    Java开发系列-时间转换
    java开发系列-服务器tomcat
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4607793.html
Copyright © 2011-2022 走看看