在Python中创建简单的对象层次结构时,我希望能够从派生类中调用父类的方法。在Perl和Java中,有一个用于此的关键字(super)。在Perl中,我可以这样做:
super
package Foo; sub frotz { return "Bamf"; } package Bar; @ISA = qw(Foo); sub frotz { my $str = SUPER::frotz(); return uc($str); }
在Python中,似乎必须从子代中明确命名父类。在上面的示例中,我将不得不执行Foo::frotz()。
Foo::frotz()
这似乎不正确,因为这种行为使创建深层次结构变得困难。如果孩子们需要知道哪个类定义了一个继承的方法,那么就会造成各种各样的信息痛苦。
这是python中的实际限制,我的理解上的空白还是两者都有?
是的,但仅适用于新型类。使用super()功能:
class Foo(Bar): def baz(self, arg): return super(Foo, self).baz(arg) 对于Python 3.x,可以使用: class Foo(Bar): def baz(self, arg): return super().baz(arg)