1.  
  2. 主页
  3.  / 
  4. Python基础到高级
  5.  / 
  6. 面向对象
  7.  / 
  8. 类作用域

类作用域

类的作用域

在之前的文章中介绍过Python的作用,在这个小结介绍下类的作用域

上面的例子可以看出,类变量对类和对象都是可见的

所有实例共享类变量,例如:

Python可以动态的给对象增减属性

上面说了所实例共享类变量,但是下面的例子又反驳了这个说法

发现e2和e的实例对应的类变量的值是不相同,而且e新创建的属性是无法访问的

从上面的例子可以看出,当给实的类变量赋值的时候,就相当于动态的给这个实例增加了一个属性,覆盖了类变量

这样就能看出,e因为么有重新给类变量赋值,因此当类变量修改的时候,e实例也就修改了,因为e2修改过NAME属性的值,相当于动态的给e2实例添加了一个变量,因此当类变量重新赋值的时候,e2是没有变化的

对于类变量和实例的准则其实就是,赋值及创建。

属性的查找顺序

上面的例子中看出了,类变量的赋值及创建,当实例重新定义类变量的时候,就是给实例动态的添加了属性,原理是什么呢?

在实例中会有两个默认属性分别是__dict__和__class__, 当你给实例动态的添加属性的时候,那么就是给__dict__中追加数据的,

属性的查找顺序

  • dict # 先从__dict_找有没有这个属性
  • class # 实例类的一个引用

另外类也是一个对象,因此也是可以动态的添加属性的

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注