python中的namespace
2015-06-29 16:32
696 查看
python中的名称空间是名称(标识符)到对象的映射。
具体来说,python为模块、函数、类、对象保存一个字典(__dict__),里面就是重名称到对象的映射。
可以参看下面python程序的输出:
而在面向对象编程中,python与C++最大的差别之一就在于python中的namespace是可以动态变化的,类的成员,类实例的成员都可以动态添加,所做的不过是在相应的namespace字典中添加一项。这里特别指出的值,函数(成员函数或全局函数)也有自己的namespace字典,甚至可以动态添加
由此,我们可以理解一下,python中所谓的构造函数__init__所做的事情了,因为成员方法第一个传入的是self引用,相当于
t1 = Test1()的时候调用Test1.__init__(t1),然后在构造函数里面添加了类实例t1的namespace字典项
具体来说,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字典项
相关文章推荐
- python中self.__class__
- Python 类 setattr、getattr、hasattr 的使用
- Python3发送post请求,自动记住cookie
- Python Django 开发 3 数据库CURD
- Python Decorators入门 (一) 【转载】
- Python递归输出字典所有不同深度的路径
- Python join()方法
- HMM最大匹配分词算法(Python)
- capitalize()在Python中含义
- Python学习笔记 - 函数参数
- Python学习笔记 - 函数参数
- python中的随机数-----random
- 汉字字频统计程序(Python版)
- python学习一
- Python正则表达式指南
- python使用xmlrpc实例讲解
- python opencv 笔记
- Python字典 (dictionary)
- python 中的列表解析和生成器表达式
- python 的一些特性