python中类变量和实例变量详解
在了解类变量和实例变量之前,首先要知道类变量和实例变量的定义。
类变量:可在类的所有实例之间共享的值,就是指不是单独分配给每个实例,实例可以调用类变量。
实例变量:实例化之后,每个实例单独拥有的变量,类不能直接调用实例变量。
一、基础的类变量和实例变量
如下示例:num代表类变量,name代表实例变量。
class Test(object):
num=0
def __init__(self,name):
self.name=name
Test.num += 1
if __name__=="__main__":
print(Test.num)
t1=Test('jack')
print(Test.num)
t2=Test('lucy')
print(t1.name,t1.num)
print(t2.name,t2.num)
二、在类的外部添加变量
在类的外部也可以对类添加类变量或实例变量。
class Test(object):
num=0
def __init__(self,name):
self.name=name
Test.num += 1
if __name__=="__main__":
t1=Test('jack')
t2=Test('lucy')
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 += 1
if __name__=="__main__":
# print(Test.num)
t1=Test('jack')
# print(Test.num)
t2=Test('lucy')
# 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)