【问题标题】:Python - multiple inheritance with same namePython - 具有相同名称的多重继承
【发布时间】:2016-03-26 18:15:11
【问题描述】:

我的主要课程为:

class OptionsMenu(object):

    def __init__(self, name):
        try:
            self.menu = getattr(self, name)()
        except:
            self.menu = None

    @staticmethod
    def cap():
        return ['a', 'b']

并有一个子类覆盖为:

class OptionsMenu(OptionsMenu):
    @staticmethod
    def cap():
        return ['a', 'b', 'c']

第一个类给出默认模板的菜单选项,而下一个给出一些其他模板。

我想要另一个类 OptionsMenu 从子类派生,并获取列表 (['a', 'b', 'c']) 并对其进行更改。

这在 python 中可以实现吗?如果是,我该如何实现?

非常感谢您的帮助!

【问题讨论】:

  • 为什么要同名?
  • 如果两个OptionsMenu 在不同的模块中是可能的,但是......为什么会这样?
  • 你派生了第二个类,是什么阻止你派生第三个?

标签: python multiple-inheritance


【解决方案1】:

没有什么能阻止你得到父静态函数的结果:

class OptionsMenu:
    @staticmethod
    def cap():
        return ['a', 'b', 'c']


class OptionsMenu(OptionsMenu):
    @staticmethod
    def cap():
        lst = super(OptionsMenu, OptionsMenu).cap()  # ['a', 'b', 'c']
        lst.append('d')
        return lst

print(OptionsMenu.cap())  # ['a', 'b', 'c', 'd']

但如前所述,为不同的类提供相同的类名是非常糟糕的主意!以后会出现很多问题。

试着想一想,为什么要为不同的类使用相同的名称。 也许他们应该有不同的名字?

class OptionsMenu

class SpecialOptionsMenu(OptionsMenu)

或者可能只要cap()是静态方法,把OptionsMenu做成不同的功能?

def cap1(): return ['a', 'b', 'c']

def cap2(): return cap1() + ['d']

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 2015-03-20
    • 2023-03-03
    • 1970-01-01
    • 2011-01-23
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多