我看过许多描述如何使用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()
答案 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 杂技。