从Python中的子类调用父类的方法?在Python中创建简单的对象层次结构时,我希望能够从派生类调用父类的方法。在Perl和Java中,有一个关键字(super)。在Perl中,我可能会这样做:package Foo;sub frotz {
return "Bamf";}package Bar;@ISA = qw(Foo);sub frotz {
my $str = SUPER::frotz();
return uc($str);}在python中,似乎必须从子类中显式地命名父类。在上面的例子中,我必须做一些类似的事情Foo::frotz().这似乎不对,因为这种行为使得很难建立深层的层次结构。如果子类需要知道哪个类定义了继承的方法,那么就会产生各种信息痛苦。这是python中的一个实际限制,还是我的理解上的空白,还是两者兼而有之?
3 回答
湖上湖
TA贡献2003条经验 获得超2个赞
super(type[, object-or-type])
返回代理对象,该对象将方法调用委托给类型为类型的父类或同级类。这对于访问已在类中重写的继承方法非常有用。搜索顺序与getattr()使用的顺序相同,只是类型本身被跳过。
class A(object): # deriving from 'object' declares A as a 'new-style-class' def foo(self): print "foo"class B(A): def foo(self): super(B, self).foo() # calls 'A.foo()'myB = B()myB.foo()
月关宝盒
TA贡献1772条经验 获得超5个赞
ImmediateParentClass.frotz(self)
frotz
super
AnyClass.whatever
whatever
AnyClass
AnyClass
添加回答
举报
0/150
提交
取消