假设我有两个类(一个是父类,一个是子类)。如果方法也在子类中定义不同,我如何引用父类中的方法?
以下是代码:
class A:
def __init__(self, num):
self.value=num
def f(self, num):
return self.value+2
class B(A):
def f(self, num):
return 7*self.f(num)
在最后一行中,我想用" self.f(num)"来引用父类A.命令,而不是B中创建无限递归的方法本身。提前谢谢。
答案 0 :(得分:38)
答案 1 :(得分:34)
如果您知道要使用A,您也可以这样明确地引用A:
class B(A):
def f(self,num):
return 7 * A.f(self,num)
记住你必须明确地给成员函数A.f()
提供self参数答案 2 :(得分:6)
与其他答案一致,有多种方法可以调用超类方法(包括构造函数),但是在Python-3.x中,这个过程已经简化了:
<强> Python的2.x的强>
class A(object):
def __init__(self):
print "world"
class B(A):
def __init__(self):
print "hello"
super(B, self).__init__()
<强> Python的3.x的强>
class A(object):
def __init__(self):
print "world"
class B(A):
def __init__(self):
print "hello"
super().__init__()
根据{{3}}, super()
现在相当于super(<containing classname>, self)
。
答案 3 :(得分:2)
为什么不保持简单?
class B(A):
def f(self, num):
return 7 * A.f(self, num)
答案 4 :(得分:1)
class B(A):
def f(self, num):
return 7 * super(B, self).f(num)
答案 5 :(得分:0)
你可以使用超级或者你可以更明确地做这样的事情。
class B(A):
def f(self, num):
return 7 * A.f(self, num)
答案 6 :(得分:0)
在Call a parent class's method from child class in Python?查看我的答案。
这里的一些其他人(不使用超级)会稍微扭曲一下。