【发布时间】:2021-01-14 10:30:22
【问题描述】:
让我们考虑以下虚拟示例:
class A:
def __init__(self, a):
self.a = a
self.backup_a = a
def reset_a(self):
self.a = self.backup_a
print ('Stop touching my stuff!')
class B(A):
def __init__(self, a, b):
super().__init__(a)
self.b = b
var = A(2)
var.reset_a()
var = B(2, 4)
var.f()
要向B 添加一个方法,该方法使用来自A 的方法reset_a,使用super(). 或self. 的boh 语法有效。哪一个更正确,为什么?
class B(A):
def __init__(self, a, b):
super().__init__(a)
self.b = b
def f(self):
self.reset_a()
或
class B(A):
def __init__(self, a, b):
super().__init__(a)
self.b = b
def f(self):
super().reset_a()
【问题讨论】:
-
这取决于,如果你正在调用一个你在新类中覆盖的函数,你使用
super(),如果该函数没有被覆盖,你使用self -
@xcodz-dot 这也是我的假设。谢谢。是的..错字..
-
类继承其超类的所有方法和属性。如果您明确需要调用父版本的方法,则只需要
super(),就像您在__init__中所做的那样,否则会导致无限递归。
标签: python class inheritance super