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 ...
随机推荐
- Event 讲解
应用场景:某件事发生时,需要采取多步的动作,此时就用到了 使用方法:创建event方法一,使用命令 make:event 生成事件在app/Events目录下,命令make:listener 生成监 ...
- 对Linux新手非常有用的 20个命令
你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳. ...
- python2 安装scrapy问题解决方法
错误代码: build/temp.linux-x86_64-:: fatal error: openssl/opensslv.h: 没有那个文件或目录 compilation terminated. ...
- Java线程与多线程教程
本文由 ImportNew - liken 翻译自 Journaldev. Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用 ...
- Qt之QSS(QDarkStyleSheet)
简述 关于样式,前面介绍了很多内容,下面分享一个深色样式表,很值得借鉴! 简述 效果 QSS 更多参考 效果 QSS /* * The MIT License (MIT) * * Copyright ...
- MessageDigest简介
一.概述 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值. MessageDi ...
- HTML 基础知识——8月8日
一.基础知识: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- 在浏览器中将表格导入到本地的EXCEL文件,注意控制内存
if ($export_flag == 1) { $rr = $this->mdl->test($test); header("Content-Type: application ...
- lucene字典实现原理——FST
转自:http://www.cnblogs.com/LBSer/p/4119841.html 1 lucene字典 使用lucene进行查询不可避免都会使用到其提供的字典功能,即根据给定的term找到 ...
- [转]使用Java Mission Control进行内存分配分析
jdk7u40自带了一个非常好用的工具,就是Java Mission Control.JRockit Misson Control用户应该会对mission control的很多功能十分熟悉,JRoc ...