为了账号安全,请及时绑定邮箱和手机立即绑定

从Python中的子类调用父类的方法?

从Python中的子类调用父类的方法?

SMILET 2019-07-06 13:38:56
从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 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

是的,但只有在新型课程..使用super()职能:

class Foo(Bar):
    def baz(self, arg):
        return super(Foo, self).baz(arg)

对于Python3.x,可以使用:

class Foo(Bar):
    def baz(self, arg):
        return super().baz(arg)


查看完整回答
反对 回复 2019-07-06
?
湖上湖

TA贡献2003条经验 获得超2个赞

Python也有超级此外:

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()


查看完整回答
反对 回复 2019-07-06
?
月关宝盒

TA贡献1772条经验 获得超5个赞

ImmediateParentClass.frotz(self)

将很好,无论直接父类是否已定义。frotz或者继承它。super只需要适当的支持倍数继承(然后,只有当每个类正确地使用它时,它才能工作)。总体而言,AnyClass.whatever会往上看whatever在……里面AnyClass的祖先AnyClass不定义/重写它,这对于“子类调用父方法”和任何其他事件都是正确的!


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 902 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信