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字典項


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM