`

python学习笔记---类

阅读更多

 

和其他语言比较,python添加一个class使用更少的语法和语义。它是C++和Modula-3  class机制的混合体。python提供了面向对象编程的标准特性。class的继承继承允许多个父类。子类可以继承父类的任何方法。子类的方法可以调用父类的同名的方法。和模块一样对象可以拥有都多成员变量。他们在运行时被创建,在创建后可以被修改。

命名空间:是一个名称到对象的一个映射。大多数命名空间都是用字典实现的。命名空间可以使内建(build -in)的名称,比如abs(),也可以是模块的全局变量,也可以是方法的局部变量。某种意义上说对象的属性也是命名空间。需要注意的是不同命名空间中的名称是没有任何关系的,这一点和java中的命名空间是一样的。

严格来讲,模块中的变量就是属性。模块是一种模块对象,而模块中的方法就是它的一个属性。

data.py:

s = 'Hello, world.'
a = 'hehe'

hello.py:
import data

print(data.s)
del data.s

print(dir(data))
print(data.s)

result:
Hello, world.
['__builtins__', '__cached__', '__doc__', '__file__', '__name__', '__package__', 'a']
Traceback (most recent call last):
  File "D:\workspace\test\src\test\hello.py", line 7, in <module>
    print(data.s)
AttributeError: 'module' object has no attribute 's'

 如果用‘del’删除这个属性,错误信息中会说没用这个模块“属性”。

 

命名空间创建的时间和生命周期也是不同的。包含build-in的变量在解释器启动的时候就创建了。并且一直存活。模块的全局命名空间在模块被读取的时候创建。一直存活到解释器撤销它。

局部变量被创建时在方法被调用的时候。在方法返回或者抛出异常的时候就会销毁局部变量。

 

global和nonlocal(3.X中可用):

关于他们的解释这里引用别人的文章:http://www.cnblogs.com/itech/archive/2011/12/31/2308640.html

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics