【发布时间】:2020-04-13 20:39:01
【问题描述】:
我正在用 Python 3 制作一个基于文本的冒险游戏,我需要为不同的敌人类型制作类。每种敌人类型将有 5 个属性(当前生命值、最大生命值、攻击、速度和准确度)。我想知道是否有任何方法可以制作这些类而不必编写多个包含相同属性声明的初始化,如果这有意义的话。所以我可以有一个超类或包含这个__init__
def __init__(self, hp, attack, speed, accuracy):
#defines stats for the enemy
self.maxhp = hp
self.currenthp = hp
self.attack = attack
self.speed = speed
self.accuracy = accuracy
只是将它“复制”到不同的敌人类型中。有什么办法可以做到这一点,还是我必须为每种敌人类型输入一个包含这个初始化的不同超类?
【问题讨论】:
-
你真的需要不同的敌人类型吗?他们改变行为还是仅仅改变价值观?想想继承还是组合更适合您的目的
-
您可以将参数打包到单独的类(最好是数据类)中,并且可以在从
__init__调用的常用继承方法中进行解包(如果需要)。 -
@UnholySheep 现在我只需要更改属性值,但我想保持灵活性,以防我决定在每种敌人类型之间进行更多更改。
-
@MichaelButscher 我该怎么做呢?
-
从 Python 3.7 开始,dataclasses 模块可以帮助创建类。
标签: python python-3.x class inheritance subclass