介绍 Python 中 class 类的使用

介绍 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.nameself.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() 来查看军队的总能源。
相关推荐
遇见很ok几秒前
js中 ES6 新特性详解
开发语言·javascript·es6
没有晚不了安9 分钟前
1.13作业
开发语言·python
布谷歌13 分钟前
Oops! 更改field的数据类型,影响到rabbitmq消费了...(有关于Java序列化)
java·开发语言·分布式·rabbitmq·java-rabbitmq
被程序耽误的胡先生18 分钟前
java中 kafka简单应用
java·开发语言·kafka
刀客12319 分钟前
python小项目编程-中级(1、图像处理)
开发语言·图像处理·python
卷卷的小趴菜学编程23 分钟前
c++之多态
c语言·开发语言·c++·面试·visual studio code
信阳农夫32 分钟前
python 3.6.8支持的Django版本是多少?
python·django·sqlite
冷琴199643 分钟前
基于Python+Vue开发的反诈视频宣传管理系统源代码
开发语言·vue.js·python
楠枬1 小时前
网页五子棋——对战后端
java·开发语言·spring boot·websocket·spring
带娃的IT创业者1 小时前
《Python实战进阶》专栏 No2: Flask 中间件与请求钩子的应用
python·中间件·flask