how to refer to a parent method in python?
本问题已经有最佳答案,请猛点这里访问。
假设我有两个类(一个是父类,一个是子类)。如果在子类中定义的方法也不同,如何在父类中引用该方法?
代码如下:
1 2 3 4 5 6 7 8 | 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中的方法本身来创建无限递归。提前谢谢。
使用
1 | return 7 * super(B, self).f(num) |
或者在python 3中,它只是:
1 | return 7 * super().f(num) |
如果您知道要使用,也可以通过以下方式显式引用:
1 2 3 | class B(A): def f(self,num): return 7 * A.f(self,num) |
记住,必须显式地将自变量赋给成员函数a.f()。
与其他答案一致,有多种方法可以调用超级类方法(包括构造函数),但是在python-3.x中,过程被简化了:
Python 2.x
1 2 3 4 5 6 7 8 | class A(object): def __init__(self): print"world" class B(A): def __init__(self): print"hello" super(B, self).__init__() |
Python 3.x
1 2 3 4 5 6 7 8 | class A(object): def __init__(self): print"world" class B(A): def __init__(self): print"hello" super().__init__() |
根据文件,
为什么不简单一点?
1 2 3 | class B(A): def f(self, num): return 7 * A.f(self, num) |
1 2 3 | class B(A): def f(self, num): return 7 * super(B, self).f(num) |
从python的子类调用父类的方法时检查我的答案?.
这对这里的其他人来说是一个轻微的扭曲(不使用super)。
你可以使用super,或者如果你可以更明确地做类似的事情。
1 2 3 | class B(A): def f(self, num): return 7 * A.f(self, num) |