Python中的类结构和继承
假设我有以下结构:Python中的类结构和继承,python,class,oop,multiple-inheritance,Python,Class,Oop,Multiple Inheritance,假设我有以下结构: 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 us
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
类中的方法和变量。但是,我对使用以下结构(重组树?)犹豫不决:
我认为跟踪MRO和继承结构会让人困惑,尤其是当我以后需要添加更多的类,扩展深度和宽度时
理想情况下,我希望VidPoker继承老虎机(从技术上讲,VidPoker是一台老虎机),但从CardGame“借用”功能
在这种情况下,有没有最佳实践和首选的课程组织方式
编辑
一些人建议:
我认为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
有一个由shuffle
方法使用的不可变类变量num_decks
。如果VidPoker
继承了Slot
,我将无法调用shuffle
,您可以尝试使用混音器
# 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()