在类体内定义的变量,默认属于类本身。如果把类当成类命名空间,那么该类变量其实就是定义在类命名空间内的变量,在类命名空间内定义的变量就属于类变量,Python 可以使用类来读取、修改类变量。
例如,下面代码定义了一个 Address 类,并为该类定义了多个类变量:
class Address : detail = '广州' post_code = '510660' def info (self): # 尝试直接访问类变量 #print(detail) # 报错 # 通过类来访问类变量 print(Address.detail) # 输出 广州 print(Address.post_code) # 输出 510660 # 通过类来访问Address类的类变量 print(Address.detail) addr = Address() addr.info() # 修改Address类的类变量 Address.detail = '佛山' Address.post_code = '460110' addr.info()
该程序中,第二、三行代码为 Address 定义了两个类变量。
对于类变量而言,它们就是属于在类命名空间内定义的变量,因此程序不能直接访问这些变量,必须使用类名来调用类变量。不管是在全局范围内还是函数内访问这些类变量,都必须使用类名进行访问。
当程序第一次调用 Address 对象的 info() 方法输出两个类变量时,将会输出这两个类变量的初始值。接下来程序通过 Address 类修改了两个类变量的值,因此当程序第二次通过 info() 方法输出两个类变量时,将会输出这两个类变量修改之后的值。
运行上面代码,将会看到如下输出结果:
广州
广州
510660
佛山
460110
实际上,Python 完全允许使用对象来访问该对象所属类的类变量(当然还是推荐使用类访问类变量)。例如如下程序:
cla

本文详细介绍了Python中类变量和实例变量的区别与使用。类变量可通过类名访问,而对象访问类变量实质也是通过类。修改类变量会影响所有实例,而对象对类变量赋值会创建实例变量,不影响类变量。
&spm=1001.2101.3001.5002&articleId=95049317&d=1&t=3&u=b9ac5e17817741c092c99fe1758bb119)
1143

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



