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字典项
python中的namespace的更多相关文章
- Python中的namespace package
在Python 3.3之前,一个目录想被当成package被导入,必须包含__init__.py文件:而在Python 3.3及以后的版本中,__init__.py文件可以不需要,直接使用import ...
- python中的进程、线程(threading、multiprocessing、Queue、subprocess)
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...
- Python中的属性管理
Python管 理属性的方法一般有三种:操作符重载(即,__getattr__.__setattr__.__delattr__和 __getattribute__,有点类似于C++中的重载操作符).p ...
- 在python中处理XML
XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下: <data> <country name="Liechtenstein"> < ...
- python中的面向对象编程
在python中几乎可以完成C++里所有面向对象编程的元素. 继承:python支持多继承: class Derived(base1, base2, base3): pass 多态:python中的所 ...
- Python中的内置函数
2.1 Built-in Functions The Python interpreter has a number of functions built into it that are alway ...
- 可爱的 Python : Python中函数式编程,第二部分
英文原文:Charming Python: Functional programming in Python, Part 2,翻译:开源中国 摘要: 本专栏继续让David对Python中的函数式编 ...
- python中uuid来生成机器唯一标识
摘要: 我们可以使用uuid1的后16位来标识一个机器. # use machine specific uuid, last 16 char will be the same if machine ...
- Python中的命名空间概念
python使用命名空间记录变量.python中的命名空间就像是一个dict,key是变量的名字,value是变量的值. python中,每个函数都有一个自己的命名空间,叫做local namespa ...
随机推荐
- NT内存
在NT/2K/XP中,操作系统利用虚拟内存管理技术来维护地址空间映像,每个进程分配一个4GB的虚拟地址空间.运行在用户态的应用程序,不能直接访问物理内存地址:而运行在核心态的驱动程序,能将虚拟地址空间 ...
- HDUOJ--汉诺塔II
汉诺塔II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 集合框架,ArrayList和Vector的区别,让arrayList线程安全的几种方案
boolean add(E e) 将指定的元素添加到此列表的尾部. void add(int index, E element) 将指定的元素插入此列表中的指定位置. boolean addAll(C ...
- Android SDK的安装以及环境变量的配置
想来试试app的开发,于是便需要在电脑上安装各种软件包,其中Android SDK就是其中一种,特地记录一下其安装过程: 1.下载地址http://baoku.360.cn/soft/show/app ...
- PDF 补丁丁 0.4.1.728 测试版发布
书签编辑器新增预览界面,可查看书签所连接到文档的页数. 该功能将继续完善,请各位关注.
- was7 安装遇到问题(Linux平台Redhat 6)
1../launchpad.sh 无法启动安装,提示无法找到浏览器 解决:直接进入WAS文件夹,执行install cd WAS ./install 2.安装时中文乱码 设置区域为美国: LANG=e ...
- ExtJs中实现tree节点,全部是单击展开和收缩效果,和收藏夹点击功能一样
listeners : { click : function(node, c) {// 单击节点事件(node是节点对象) if(!node.isLeaf()){//不是叶子节点 node.singl ...
- java面向对象编程——第四章 类和对象
OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启 ...
- js的严谨模式
一.怎么用 <script type="text/javascript"> "use strict"; //放在脚本文件第一行,整个脚本将以 ...
- 把Angular中的$http变成jQuery.ajax()一样,可以让后台(php)轻松接收到参数
最近接到一个手机项目,我决定用ionic + php + mysql来实现.ionic是一个前端框架,主要用于手机端,它融合了html5.css3.angularJS于一体,用起来很顺手. 开始构建项 ...