假设我有以下结构:
class CasinoGame
self.expected_return
class CardGame(CasinoGame)
self.deck
def shuffle()
def reset() # get a new deck and shuffle
class Slot(CasinoGame)
self.credits
def spin()
def reset() # return credit to user, reset bonus progression
现在我想介绍另一个类VideoPoker
这是一个基于卡片的老虎机游戏。理想情况下,我想使用CardGame
和Slot
类中的方法和变量。但是,我对使用以下结构(重组树?)犹豫不决:
class VidPoker(CardGame, Slot)
我认为跟踪MRO和继承结构会很困惑,尤其是当我需要稍后添加更多类,扩展深度和宽度时。
理想情况下,我希望VidPoker继承Slot(视频扑克技术上是老虎机),但是"借用"来自CardGame的功能。
在这些类型的情况下,是否有最佳实践,构建类的首选方法?
修改
一些人建议:Is it possible to do partial inheritance with Python?
我认为mixin方法(接受的答案)在大多数情况下都是一个很好的解决方案,但在某些方法使用类变量的情况下会失败。
实施例
# this works
class Class2(object):
def method(self):
print ("I am method at %s" % self.__class__)
class Class1(object): pass
class Class0(Class1):
method = Class2.method
ob = Class0()
ob.method()
# this doesn't work
class Class2(object):
s = 'hi'
def method(self):
print (self.s)
class Class1(object): pass
class Class0(Class1):
method = Class2.method
ob = Class0()
ob.method()
回到我的示例,假设CardGame
具有num_decks
方法使用的不可变类变量shuffle
。如果shuffle
继承VidPoker
,我将无法从Slot
致电{1}}。