python类

一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:

 1 class Dog(object):
 2     kind = 'canine'  #类变量用于类的所有实例共享的变量
 3     def __init__(self,name):
 4         self.name = name   #实例变量用于对每一个实例都是唯一的数据
 5 
 6 d = Dog('Fido')
 7 e = Dog('Buddy')
 8 
 9 print("d.kind: %s"%d.kind)  #所有实例共享
10 print("e.kind: %s"%e.kind)  #所有实例共享
11 print("d.name: %s"%d.name)  #不同实例,值不同
12 print("e.kind: %s"%e.name)  #不同实例,值不同
View Code

显示结果:

d.kind: canine
e.kind: canine
d.name: Fido
e.kind: Buddy

正如在名称和对象讨论的,可变对象,例如列表和字典,的共享数据可能带来意外的效果。例如,下面代码中的tricks 列表不应该用作类变量,因为所有的Dog 实例将共享同一个列表:

 1 class Dog:
 2 
 3     tricks = []             # 错误的适用类变量
 4 
 5     def __init__(self, name):
 6         self.name = name
 7 
 8     def add_trick(self, trick):
 9         self.tricks.append(trick)
10 
11 >>> d = Dog('Fido')
12 >>> e = Dog('Buddy')
13 >>> d.add_trick('roll over')
14 >>> e.add_trick('play dead')
15 >>> d.tricks                # 所有实例共享了该属性
16 ['roll over', 'play dead']
View Code

这个类的正确设计应该使用一个实例变量:

1 class Dog(object):
2     def __init__(self,name):
3         self.name = name
4         self.tricks = []  #为每一个实例创建一个空的列表
5     def add_trick(self,trick):
6         self.tricks.append(trick)
View Code
原文地址:https://www.cnblogs.com/guoqp/p/5435034.html