编程学习网 > 编程语言 > Python > 编写类时总是重复代码?抽出父类,让Python代码更精简
2026
09-03

编写类时总是重复代码?抽出父类,让Python代码更精简


你是不是也遇到过这种情况。写了好几个类,发现代码长得差不多,就是某些细节不一样。复制粘贴很爽,但改起来很痛苦。改一个地方,得翻遍所有类去同步修改。漏掉一个,bug就来了。

我刚开始学写Python的时候,就踩过这个坑。那时候要做个简单的游戏,有玩家,有敌人,还有NPC。每个角色都有自己的名字,都能说话,但说话的方式不一样。我老老实实写了三个类,每个类都写了 init 方法,都定义了 speak 方法。代码长度翻了三倍,逻辑却基本一样。后来要加个年龄属性,我愣是在三个文件里改了六处地方。改完心里还在打鼓,生怕漏掉什么。

其实只要抽出个父类,事情就简单多了。把共同的属性,比如名字,放到一个角色基础类里。把共同的方法,比如如何初始化、如何打印名字,也放进去。子类只需要管自己特殊的部分。要是以后想统一修改公共部分,改父类就行,子类自动跟着变。

来看看怎么写。假设所有角色都有名字和生命值。

class Character:
     def __init__(self, name, hp):
         self.name = name
         self.hp = hp
     def speak(self):
         print(f'{self.name} 发出了声音')

然后让子类继承它。

class Player(Character):
     def speak(self):
         print(f'{self.name} 问你,有啥任务?')

class Enemy(Character):
     def speak(self):
         print(f'{self.name} 吼叫着,有种别跑!')

你看,PlayerEnemy都没有写__init__方法,它们直接用了父类的初始化逻辑。只改写了speak方法,这就叫重写。代码量直接砍半。

如果你想让子类既有父类的初始化逻辑,又想加点自己的东西。用super()就行。

class Hero(Character):
     def __init__(self, name, hp, level):
         super().__init__(name, hp)
         self.level = level

这样既保留了父类的那套初始化流程,又扩展了自己的新属性level。代码还是干净利落。

有人说这听起来像继承,老生常谈了。但真到了实际项目里,面对几十个类的时候,没几个人能忍住不写重复代码。往往是等到项目后期,改一处要动几十个文件的时候,才后悔没早抽父类。

抽父类不是为了炫技,是为了让你少加班。是为了让你在改需求的时候,不用翻遍所有代码去查找替换。是为了让你的同事接手代码时,不用骂着娘去改你的复制粘贴。

下次写类的时候,停一下,看看哪些代码是每份都在重复的。把它塞进一个父类里。你的代码会更短,你的逻辑会更清晰,你的头发会掉得更慢。

以上就是“编写类时总是重复代码?抽出父类,让Python代码更精简的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。   

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取