Python - 具有相同名称的多重继承

时间:2016-03-26 18:15:12

标签: python multiple-inheritance

我的主要课程为:

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']

第一个类提供默认模板的菜单选项,而next提供其他模板。

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

这在python中是否可以实现?如果是的话,我怎么能实现这个目标呢?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

没有什么可以阻止你获得父亲的静态功能的结果:

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']