Call a parent class method from a child class in Python 2
我想在python 2中使用super()调用父类方法。
在python 3中,我会这样编码:
1 2 3 4 5 6 7 8 9 10 11 12 | class base: @classmethod def func(cls): print("in base:" + cls.__name__) class child(base): @classmethod def func(cls): super().func() print("in child:" + cls.__name__) child.func() |
使用此输出:
1 2 | in base: child in child: child |
号
但是,我不知道如何在Python2中实现这一点。当然,我可以使用
1 2 | in base: base in child: child |
当
1 | TypeError: must be type, not classobj |
。
你知道它是如何使用
进一步研究另一个答案,你可以像
1 2 3 4 5 6 7 8 9 10 11 12 | class base(object): @classmethod def func(cls): print("in base:" + cls.__name__) class child(base): @classmethod def func(cls): super(cls, cls).func() print("in child:" + cls.__name__) child.func() |
号
父对象需要从Python2中的对象继承。所以:
1 2 3 4 5 6 7 8 9 10 11 | class base(object): def func(self): print("in base") class child(base): def func(self): super(child, self).func() print("in child") c = child() c.func() |
我试图做一些类似的事情,我试图基本上"走上"继承链,直到我找到某个基类,然后用类名在那里做一些事情。我遇到的问题是,所有这些答案都假定你知道你想要得到的班级的名字。我尝试了"super(cls,cls)"方法,但得到了上面描述的"iniefirmit递归"问题。这是我降落的地方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @classmethod def parent_name(cls): if BaseDocument in cls.__bases__: # This will return the name of the first parent that subclasses BaseDocument return cls.__name__ else: for klass in cls.__bases__: try: parent_name = klass.parent_name() if parent_name is not None: return parent_name except AttributeError: pass return None |