介绍 Python 中 class 类的使用
在面向对象编程(OOP)中,class
是一种定义对象的蓝图。它不仅能够封装数据(称为属性),还能够封装功能(称为方法)。今天,我们通过一个简单的例子来学习如何使用 Python 的 class
来创建一个类,并通过实例化对象来操作类的属性和方法。
1. 什么是类?
类是对象的模板或蓝图。一个类定义了对象的属性和行为。类本身并不占用内存,只有在实例化(创建对象)时,内存才会为这个对象分配。类中包含的属性和方法会作用于该类的所有对象。
2. 示例代码分析
接下来,我们分析一个简单的战车类 Tank
。该类用于模拟一支军队中的战车。
python
class Tank:
# 类变量:军队共享的科技等级
TECH_LEVEL = 1
_total_energy = 0 # 用于记录军队的总能源
def __init__(self, name, energy):
"""初始化方法,创建战车时设置名称和能量"""
self.name = name # 实例变量:战车的名称
self.energy = energy # 实例变量:战车的能量
Tank._total_energy += energy # 每次创建战车时,增加军队总能源
@property
def damage(self):
"""根据科技等级和能量计算伤害"""
return self.energy * 0.1 * Tank.TECH_LEVEL
def fire(self):
"""战车发射炮弹"""
print(f"{self.name} 发射 {self.damage} 点伤害的炮弹!")
@classmethod
def upgrade_tech(cls):
"""类方法修改类状态:升级科技"""
cls.TECH_LEVEL += 1
print(f"科技升级至 {cls.TECH_LEVEL} 级!")
@classmethod
def get_total_energy(cls):
"""类方法访问类变量,获取军队总能源"""
return f"军队总能源:{cls._total_energy} 单位"
3. 类的组成部分
3.1 类变量
python
TECH_LEVEL = 1
_total_energy = 0
TECH_LEVEL
是一个类变量。类变量是由类本身共享的,对于类的所有实例来说,类变量的值是相同的。这个变量用于表示军队的科技等级。_total_energy
是另一个类变量,用来记录所有战车的总能源。
3.2 实例变量
python
self.name = name
self.energy = energy
self.name
和self.energy
是实例变量,它们是每个对象独有的。每个战车对象的name
(名称)和energy
(能量)都会有所不同。
3.3 初始化方法
python
def __init__(self, name, energy):
self.name = name
self.energy = energy
Tank._total_energy += energy
__init__
是初始化方法,类似于构造函数。每次创建一个Tank
对象时,__init__
方法都会自动被调用。它用于设置战车的名称和能量,并将能量加入到total_energy
中。
3.4 属性方法
python
@property
def damage(self):
return self.energy * 0.1 * Tank.TECH_LEVEL
@property
修饰符使得damage
成为一个只读属性。你可以像访问普通属性一样访问damage
,但实际上它是通过方法计算得出的。在这个例子中,damage
的值是战车能量与科技等级的乘积。@property添加与不添加的对比:
方式 | 存储空间 | 实时计算 | 防止误修改 | 逻辑封装性 |
---|---|---|---|---|
普通属性 self.damage |
固定值 | ❌ | ❌ | ❌ |
@property |
动态值 | ✔️ | ✔️ | ✔️ |
3.5 实例方法
python
def fire(self):
print(f"{self.name} 发射 {self.damage} 点伤害的炮弹!")
fire
方法是一个实例方法,它输出战车发射的伤害信息。注意,它使用了self.damage
来获取伤害值,这会触发damage
属性方法的计算。
3.6 类方法
python
@classmethod
def upgrade_tech(cls):
cls.TECH_LEVEL += 1
print(f"科技升级至 {cls.TECH_LEVEL} 级!")
@classmethod
修饰符使得upgrade_tech
成为类方法。类方法的第一个参数是cls
,它代表类本身,而不是类的实例。通过类方法,你可以访问和修改类变量。例如,upgrade_tech
方法会增加TECH_LEVEL
。
python
@classmethod
def get_total_energy(cls):
return f"军队总能源:{cls._total_energy} 单位"
- 另一个类方法
get_total_energy
用来获取军队的总能源。它也通过cls
访问了类变量_total_energy
。
4. 使用类
接下来,我们来看看如何使用这个 Tank
类。
python
# 创建战车实例
tank1 = Tank("重型坦克", 100)
tank1.fire() # 输出:重型坦克 发射 10.0 点伤害的炮弹!
# 升级科技并发射炮弹
Tank.upgrade_tech() # 输出:科技升级至 2 级!
tank1.fire() # 输出:重型坦克 发射 20.0 点伤害的炮弹!
# 创建其他战车
tank2 = Tank("快速战车", 150)
tank2.fire() # 输出:快速战车 发射 15.0 点伤害的炮弹!
# 获取军队总能源
print(Tank.get_total_energy()) # 输出:军队总能源:350 单位
- 我们首先创建了一个
tank1
实例,并为其设定名称和能量,之后调用fire()
方法,输出战车发射的伤害。 - 接着,调用类方法
upgrade_tech()
升级科技,然后重新调用fire()
,可以看到伤害增加了。 - 然后,我们创建了另一个战车
tank2
,并发射炮弹。 - 最后,我们调用类方法
get_total_energy()
来查看军队的总能源。