• 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字典项

  • 相关阅读:
    Clustering by fast search and find of density peaks
    《第一行代码》(二)
    TF-IDF
    《第一行代码》(一)
    《OpenCV入门》(三)
    OpenCV入门(二)
    协方差矩阵特征向量的意义
    ICA
    整数划分
    1144. The Missing Number (20)
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4607793.html
Copyright © 2020-2023  润新知