Python中的类变量和实例变量

Python中的类变量和实例变量

一、话不多先上代码

class A:
    aa = 1
    def __init__(self,x,y):
        self.x = x
        self.y = y
a = A(2,3)
print(a.x, a.y, a.aa) # 2,3,1
print(A.aa) # 1
print(A.x) # AttributeError:type object ‘A’ has no attribute ‘x’

其中aa就是一个类变量。类中先初始化__init__()构造函数,其中传进来的第一个参数self是指类的一个实例。而传进来的参数x,y也就实例化对象的参数。

二、属性修改

下面的内容都是基于上边最开始的代码

a = A(2,3)
A.aa = 11
print(a.x, a.y, a.aa) # 2,3,11
print(A.aa) # 11

修改类变量之后,相关实例对象查找其属性也会发生改变(a.aa也变为11)。

a = A(2,3)
A.aa = 11
a.aa = 100
print(a.x, a.y, a.aa) # 2,3,100
print(A.aa) # 11

添加a.aa = 100之后,发现只有a.aa发生了改变,A.aa还是11,即类中的属性没变。

赋值语句在实例化对象上操作时,类变量不会改变;又因为实例对象a中没有aa属性(变量),所以a.aa = 100会使实例对象a新建一个aa属性(变量),并将其赋值100

a = A(2,3)
A.aa = 11
a.aa = 100
print(a.x, a.y, a.aa) # 2,3,100
print(A.aa) # 11

b = A(3,5)
print(b.aa) # 11

实例化一个b对象,发现b.aa并不是100(a.aa),而是之前的11(A.aa),,其实对象A(类)中的类变量是所有实例对象共享的。

小节

  • 类变量和实例变量是相互独立的

  • 在实例上用赋值语句会新建一个属性(变量)

猜你喜欢

转载自blog.csdn.net/weixin_43901214/article/details/106889049