python学习笔记---类
程序员文章站
2023-12-22 22:18:16
...
类
和其他语言比较,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