Python中的类结构和继承

2024-09-30 01:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下结构:

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继承吃角子老虎机(从技术上讲,电动扑克是一个吃角子老虎机),但“借用”功能从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方法使用。如果VidPoker继承了Slot,我就不能从shuffle调用它。你知道吗


Tags: 方法selfobjectdef情况结构methodclass

热门问题