python 命名空間,python中的namespace

 2023-10-18 阅读 29 评论 0

摘要:?python中的名稱空間是名稱(標識符)到對象的映射。 具體來說,python為模塊、函數、類、對象保存一個字典(__dict__),里面就是重名稱到對象的映射。 可以參看下面python程序的輸出: print('globals:') print(globals().keys()) print('')

?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 = 2z = 3print('globals inside if :%s' % (globals().keys()))print('locals inside if: %s' % (locals().keys()))del yprint('locals after del: %s' % (locals().keys()))

?

python 命名空間、而在面向對象編程中,python與C++最大的差別之一就在于python中的namespace是可以動態變化的,類的成員,類實例的成員都可以動態添加,所做的不過是在相應的namespace字典中添加一項。這里特別指出的值,函數(成員函數或全局函數)也有自己的namespace字典,甚至可以動態添加

class Test1(object):x = 1def __init__(self):self.y =  2self.z = 3def 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字典項

轉載于:https://www.cnblogs.com/hustxujinkang/p/4607793.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/147370.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息