通常来说,实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的属性和方法。
其实我更愿意用类属性和实例属性来称呼它们,但是变量这个词已经成为程序语言的习惯称谓。一个正常的示例是:
class Dog:
kind = '土狗' # class variable shared by all instances
def __init__(self, name):
self.name = name # instance variable unique to each instance
def bark(self):
print(f'a {self.kind} dog named {self.name} is barking:"汪汪!"')
def changeKind(self,kindName):
self.kind = kindName
def changeName(self,name):
self.name = name
print('最初:------')
d1=Dog('阿旺')
d2=Dog('二蛋')
d1.bark()
d2.bark()
print('\n修实例变量后:------')
d1.changeKind('哈奇士')
d2.changeName('查理')
d1.bark()
d2.bark()
print('\n修类变量后:------')
Dog.kind='藏獒'
d3=Dog('翠花')
d1.bark() # 不受影响 [self.kind一开始是指向类变量,经过重新赋值后,变成实例变量了]
d2.bark() # 受影响 [之前创建的实例也是受影响的]
d3.bark() # 受影响
类Dog中,类属性kind为所有实例所共享;实例属性name为每个Dog的实例独有。
结果:
最初:------
a 土狗 dog named 阿旺 is barking:"汪汪!"
a 土狗 dog named 二蛋 is barking:"汪汪!"
修实例变量后:------
a 哈奇士 dog named 阿旺 is barking:"汪汪!"
a 土狗 dog named 查理 is barking:"汪汪!"
修类变量后:------
a 哈奇士 dog named 阿旺 is barking:"汪汪!"
a 藏獒 dog named 查理 is barking:"汪汪!"
a 藏獒 dog named 翠花 is barking:"汪汪!"
注意,对类变量重新赋值,可以影响到之前创建的实例的。
本文详细阐述了Python中类变量和实例变量的区别,包括它们的定义、共享特性及修改对实例的影响。通过实例代码演示了类变量与实例变量的实际操作,以及如何影响新旧实例。
3256

被折叠的 条评论
为什么被折叠?



