
你是不是也遇到过这种情况。写了好几个类,发现代码长得差不多,就是某些细节不一样。复制粘贴很爽,但改起来很痛苦。改一个地方,得翻遍所有类去同步修改。漏掉一个,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} 吼叫着,有种别跑!')
你看,Player和Enemy都没有写__init__方法,它们直接用了父类的初始化逻辑。只改写了speak方法,这就叫重写。代码量直接砍半。
如果你想让子类既有父类的初始化逻辑,又想加点自己的东西。用super()就行。
class Hero(Character):
def __init__(self, name, hp, level):
super().__init__(name, hp)
self.level = level
这样既保留了父类的那套初始化流程,又扩展了自己的新属性level。代码还是干净利落。
有人说这听起来像“继承”,老生常谈了。但真到了实际项目里,面对几十个类的时候,没几个人能忍住不写重复代码。往往是等到项目后期,改一处要动几十个文件的时候,才后悔没早抽父类。
抽父类不是为了炫技,是为了让你少加班。是为了让你在改需求的时候,不用翻遍所有代码去查找替换。是为了让你的同事接手代码时,不用骂着娘去改你的复制粘贴。
下次写类的时候,停一下,看看哪些代码是每份都在重复的。把它塞进一个父类里。你的代码会更短,你的逻辑会更清晰,你的头发会掉得更慢。
以上就是“编写类时总是重复代码?抽出父类,让Python代码更精简”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14481/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料