因为类的定义借用了命名空间,所以要深入的接触类,先得了解python的命名空间和作用域。
命名空间是从命名到对象的映射。
不同命名空间中的命名是没有任何联系的。
python中的任何一个“.”之后的命名为属性,比如:在x.pro表达式中,pro就是对象x的属性。
严格的说,从模块中引用命名空间是引用属性,modelname.function中,modelname是一个模型对象,function是它的一个属性,因此,模块中的属性和模块中的命名有直接的隐射关系,因为他们共享同一个命名空间。
属性是可以是可读或写的,对于可写的属性,可以进行赋值,比如:modelname.value = ‘value’,可写的属性可以用del删除。
比如:del modelname.value。
不同命名空间在不同的时刻创建,并且有不同的生存周期。
包含内置命名的命名空间是在python的解释器启动时候就创建的,并且一直保留,不会被删除。
函数在被调用时候创建一个命名空间,而每一个递归也都拥有自己的命名空间。
作用域是python程序中一个命名空间可以直接访问的文本区域。在这里,直接访问的意思是查找命名时无需应用命名前缀。
尽管作用域是静态定义的,但是在使用的时候,他们都是动态的,每次执行的时候,至少有三个命名空间可以直接访问的作用域嵌套在一起。他们分别是局部的,它在最里面,首先被搜索,然后再是当前命名空间作用域,最后是系统内置的作用域。
它们的搜索顺序是:局部命名空间->当前命名空间->内置命名空间
一般的局部命名空间是函数的内部,递归的内部。
如果一个命名声明为全局,那么所有的赋值和引用都是直接针对包含模块全局命名的中级作用域。
作用域决定于源程序的文本。
其实呢,更好的理解还是得以后多写代码才成啊
0 Comments.