在了解类变量和实例变量之前,首先要知道类变量和实例变量的定义。
类变量:可在类的所有实例之间共享的值,就是指不是单独分配给每个实例,实例可以调用类变量。
实例变量:实例化之后,每个实例单独拥有的变量,类不能直接调用实例变量。
如下示例:num代表类变量,name代表实例变量。
class Test(object): num=0 def __init__(self,name): self.name=name Test.num += 1if __name__=="__main__": print(Test.num) t1=Test('jack') print(Test.num) t2=Test('cjdsg') print(t1.name,t1.num) print(t2.name,t2.num) 二、在类的外部添加变量在类的外部也可以对类添加类变量或实例变量。
class Test(object): num=0 def __init__(self,name): self.name=name Test.num += 1if __name__=="__main__": t1=Test('jack') t2=Test('cjdsg') Test.class_str="添加类变量" print(Test.class_str) print(t1.class_str) print(t2.class_str) #添加实例变量 t1.age = 20 三、变量是不是随意添加?当不对类进行限制时,可以随便对类进行添加变量,使用__slots__可以对实例变量做限制:
class Test(object): age = 1 __slots__ = ["name","num"] def __init__(self,name): self.name = name Test.age += 1if __name__=="__main__": # print(Test.num) t1=Test('jack') # print(Test.num) t2=Test('cjdsg') # print(t1.name,t1.num) # print(t2.name,t2.num) Test.class_str="添加类变量" print(Test.class_str) print(t1.class_str) print(t2.class_str) t1.age = 20 #报错,此时不能再添加实例属性 print(Test.age)