类属性
大家好,这个章节我们来介绍一下类属性。
简介
在 Python 中,一切皆为对象,类也不例外,在程序运行过程中,类也会做为一个对象使用。
类对象与实例对象不同,可以理解为实例对象是由类对象复制而来,每个实例对象之间具有数据独立性。而类对象在程序运行过程中,只有一个。
既然是对象,那么就可以拥有自己的属性,在类中定属性时,属性名有 self 前缀的是实例属性,而在类中直接定义的属性即为类属性。
# 定义一个饮水机类
class WaterDispenser:
# 剩余水量
surplus_water = 1500
# 出水口
def water_outlet(self, n):
WaterDispenser.surplus_water -= n
print("剩余水量:", WaterDispenser.surplus_water)
wd1 = WaterDispenser()
wd2 = WaterDispenser()
wd1.water_outlet(100)
print(wd1.surplus_water)
wd2.water_outlet(200)
print(wd2.surplus_water)
print(WaterDispenser.surplus_water)
在Python中,一切都是对象,类本身也是一个对象。当我们在程序中使用类时,其实是在使用类对象。类对象和实例对象有一个很重要的区别:实例对象是通过类对象创建出来的,每个实例对象之间的数据是独立的。而类对象在整个程序运行期间,只有一个实例。既然类也是一个对象,那它也能有自己的属性。类属性和实例属性不同,实例属性通常是通过self来定义的,而类属性则是直接在类中定义的,且没有self前缀。举个例子,假设我们有一个饮水机类,每个饮水机实例的剩余水量是一样的,它们都共享同一个类属性surplus_water,并且这个属性可以在类中的方法里进行修改。在这个例子中,surplus_water是类属性,两个实例对象wd1和wd2共享这个属性。每次调用water_outlet方法时,surplus_water的值都会减少。
类属性特征
- 在类中直接定义的变量为类属性
- 在方法中使用类属性时,需要使用类名做为前缀
类名.类属性名 - 在类的外部可以通过类名或实例对象名访问类属性
- 所有的实例对象名共享一个类属性
- 实例对象只能获取类属性的值,不能直接进行修改,只能通过方法进行修改
接下来,我们来详细讲解一下类属性的几个特征。首先,类属性是在类中直接定义的,而不是在构造方法 init 中或者实例方法中。它们是类的成员,所有实例对象都可以共享这个属性。其次,我们在类的方法中访问类属性时,需要使用类名作为前缀,比如WaterDispenser点surplus_water。这样做的目的是明确说明我们访问的是类属性,而不是实例属性。第三,类属性既可以通过类名来访问,也可以通过实例对象来访问。比如我们可以通过WaterDispenser点surplus_water或者wd1点surplus_water来访问类属性。第四,类属性是共享的,所有实例对象都使用相同的类属性。这也是为什么在饮水机类中,不论你创建了多少个饮水机实例,它们都会共享剩余水量这个属性。第五,实例对象可以访问类属性的值,但不能直接修改它。如果我们想修改类属性的值,必须通过类名或者类中的方法来修改。
总结
- 类属性特征
最后,我们来简单总结一下。类属性是直接在类中定义的变量。在方法中访问类属性时,需要通过类名来访问。类属性是所有实例对象共享的。实例对象只能获取类属性的值,但不能直接修改类属性。希望大家理解类属性和实例属性的区别,以及如何在代码中正确使用类属性!