【发布时间】:2021-12-23 23:43:07
【问题描述】:
我想,最好的解释方式就是举例。编写游戏,为所有角色类创建一个父类,用于建立基本方法和价值观,以及一大群种族和职业的子类。
所以你有精灵、兽人、人类可以修改基本属性,然后是坦克、盗贼、施法者等可以进行额外修改的职业。通过使用 super(),做起来相当简单:
class ElfTank( Elf, Tank )
并获得您想要的组合修改。
有没有一种方法可以动态创建一个对象并指定其父对象,而无需创建九个预先确定的类(在三个职业和三个种族的情况下)?
注意:这是一个示例,因为我使用 PacMan 或 D&D 来解释任何 OOP 事物要容易得多。实际的应用程序涉及两到六位父母,并且会涉及太多背景故事。
编辑:好的,根据反馈,以及对一些附加链接的挖掘,以及我自己的一些修补,我将回答我自己的问题。
【问题讨论】:
-
这能回答你的问题吗? Dynamic inheritance in Python
-
鉴于多重继承变得多么脆弱,我现在告诉你这是一个糟糕的主意。使用组合(
Elf可能包含引用Tank或其他类的属性.class_,并可能通过__getattr__动态重定向查找)和/或公共属性(可能对Race类使用ABC这需要存在Class作为属性),而不是多重继承。如果您觉得您不仅想要多重继承,还想要 动态 多重继承,那么您几乎肯定会得到an XY problem。 -
考虑改用组合,查找实体组件系统。
标签: python