向从同一个类派生的子类中添加一组公共方法/属性的正确方法是什么?在
让我们假设这些是我的类,我需要一个基于动物的视频游戏(这只是一个例子,我不是真的在写游戏,但想法是一样的)
class Animal():
def __init(self, numlegs):
self.numlegs = numlegs
class Dog(Animal):
def __init(self, numlegs):
Animal.__init__(self, numlegs)
def bark(self):
print "Arf!"
class Cat(Animal):
def __init(self, numlegs):
Animal.__init__(self, numlegs)
def playwithmouse(self):
print "It's fun!"
class Duck(Animal):
def __init(self, numlegs):
Animal.__init__(self, numlegs)
def fly(self):
print "Weee!"
在游戏中,狗和鸭子可以被武器化,它们需要有相同的方法:fire()、reload()和properties:ammoncount。在
我认为在Animal()类中添加它们是不正确的,因为它们将在游戏的另一个完全不同的部分中被需要。在
添加它们的正确方法是什么?在
更新 我想补充一下,预期的结果是 动物武器混合类
^{pr2}$我从答案中得到的是,如果我需要全套“武器/弹药”,我可以使用多类,否则合成是一种方法。在
您可以利用python中的多个继承,如:
现在您可以执行以下操作:
^{pr2}$如果^{cd1>}仅仅应为bean^{cd2>},而不是^{cd2>}-^{cd4>}混合型,则使用^{cd4>}的实例,并将其分配给狗作为组件:
^{pr3}$那么您必须使用^{cd6>}。这可能不符合您的概念^{cd1>,实际上是一种武器,但现在它已经武器化了。:)
如果您有一个dog实例,并且需要它随时进行武器化,那么就利用python的动态属性分配
^{pr4}$一般来说我会说:
用构图来做这个
一种可能:根本不要把它们添加到类中。创建一个“武器”类,其中包含有关武器如何工作的所有信息,并将该类的实例添加到可以成为武器的对象中。在
当然,这意味着需要重新考虑一下您的架构,但这是一个很好的概念。这种想法通常被称为“基于组件的”。Google for "component-based game objects"并尝试找到一些描述这个想法的博客文章/演示。在
相关问题 更多 >
编程相关推荐