在Python中构建类和继承

时间:2017-08-04 02:30:04

标签: 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 user, reset bonus progression

现在我想介绍另一个类VideoPoker这是一个基于卡片的老虎机游戏。理想情况下,我想使用CardGameSlot类中的方法和变量。但是,我对使用以下结构(重组树?)犹豫不决:

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}}。

0 个答案:

没有答案