使用派生类之外的派生类对象调用基类方法

时间:2017-06-29 08:15:10

标签: python inheritance super

我看过许多描述如何使用super关键字在派生类函数内调用基类函数的帖子。我想使用派生类对象全局调用基类重载函数。

class a:
    def __init__(self):
        self.x=45
    def fun(self):
        print "fun in base class"
class b(a):
    def __init__(self):
        self.y=98           
    def fun(self):
        print "fun in derived class"
objb=b()
objb.fun()#here i want to call the base class fun()

2 个答案:

答案 0 :(得分:1)

输入:

objb = b()
super(b, objb).fun()

输出:

fun in base class

修改

正如下面的评论中提到的,在Python 2.7+中,您需要声明class a(object)才能使其正常工作。这来自Python中类的历史演变,此解决方案仅适用于“新式”类,即从object继承的类。但是在Python 3.x中,默认情况下所有类都是“new-style”,这意味着您不必执行这一小小的添加。

答案 1 :(得分:1)

如果你真的想调用适用于旧式类(不扩展object的类)的'base'函数,你可以这样做:

objb = b()
a.fun(objb)  # fun in base class

或者,如果你不知道基类/父类,你可以从实例本身“提取”它:

objb = b()
objb.__class__.__bases__[0].fun(objb)  # fun in base class

但是省去一些麻烦,只需从object扩展您的基类,这样就可以使用super()符号而不是 base 杂技。