一篇文章搞懂一篇文章搞懂Python的类与对象名称空间的类与对象名称空间
主要给大家介绍了关于Python的类与对象名称空间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习
或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
代码块的分类代码块的分类
python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:
文件或模块整体是一个代码块,名称空间为全局范围
函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层
函数内部可嵌套函数,嵌套函数有更内一层的名称空间
类代码块,名称空间为类自身
类中可定义函数,类中的函数有自己的名称空间,在类的内层
类的实例对象有自己的名称空间,和类的名称空间独立
类可继承父类,可以链接至父类名称空间
正是这一层层隔离又连接的名称空间将变量、类、对象、函数等等都组织起来,使得它们可以拥有某些属性,可以进行属性查
找。
本文详细解释类和对象涉及的名称空间,属于纯理论类的内容,有助于理解python面向对象的细节。期间会涉及全局和本地变量
作用域的查找规则,如有不明白之处,可先看文章:Python作用域详述
一个概括全文的示例一个概括全文的示例
以下是一个能在一定程度上概括全文的示例代码段:
x = 11 # 全局变量x
def f(): # 全局变量f
print(x) # 引用全局变量x
def g(): # 全局变量g
x = 22 # 定义本地变量x
print(x) # 引用本地变量x
class supcls(): # 全局变量supcls
x = 33 # 类变量x
def m(self): # 类变量m,类内函数变量self
x = 44 # 类内函数变量x
self.x = 55 # 对象变量x
class cls(supcls): # 全局变量cls
x = supcls.x # 引用父类属性x,并定义cls类属性x
def n(self): # 类变量n
self.x = 66 # 对象变量x
如果能理解上面的每个x属于哪个作用域、哪个名称空间,本文内容基本上就理解了。
类的名称空间类的名称空间
下面有一个类,类中有类属性x、y,有类方法m和n。
class supcls():
x = 3
y = 4
def m(self):
x = 33
self.x = 333
self.y = 444
self.z = 555
def n(self):
return self.x, self.y, self.z
当python解释到supcls代码块后,知道这是一个类,类有自己的名称空间。所以,当知道了这个类里面有x、y、m、n后,这几个
属性都会放进类supcls的名称空间中。
如下图: