Python 在super()内调用父方法。当方法被子方法重写时
我已重写子类中的方法。 此方法在父类构造函数中使用。 在子类中调用Python 在super()内调用父方法。当方法被子方法重写时,python,oop,Python,Oop,我已重写子类中的方法。 此方法在父类构造函数中使用。 在子类中调用super() 例如: A类: 定义初始化(自): self.method() def方法(自我): 打印('父方法!') B(A)类: 定义初始化(自): super()。\uuuu init\uuuuu() def方法(自我): 打印('子方法!') b=b() 输出:子方法 而我想得到父方法 编辑: 我需要父类的类构造函数使用not OVERRIDE方法,但在此之后,父类对method()的每次调用都应该调用OVERRID
super()
例如:
A类:
定义初始化(自):
self.method()
def方法(自我):
打印('父方法!')
B(A)类:
定义初始化(自):
super()。\uuuu init\uuuuu()
def方法(自我):
打印('子方法!')
b=b()
输出:子方法代码>
而我想得到父方法代码>
编辑:
我需要父类的类构造函数使用not OVERRIDE方法,但在此之后,父类对method()
的每次调用都应该调用OVERRIDE方法。如果您遇到这种情况,我建议如下:
class B(A):
def __init__(self):
super().__init()
self.n_method = 1
def method(self):
if self.n_method == 1:
super().method()
else:
do method B stuffs
self.n_method += 1
如果您遇到这种情况,我建议您:
class B(A):
def __init__(self):
super().__init()
self.n_method = 1
def method(self):
if self.n_method == 1:
super().method()
else:
do method B stuffs
self.n_method += 1
因为我需要不使用重写的方法调用父构造函数,但每次都需要使用重写的方法
这表示您要求一种方法做的事情太多。将方法
分为两部分:一部分不被A.\uuu init\uuuu调用,另一部分可以被重写。差不多
class A:
def __init__(self):
self._init_method()
def _init_method(self):
print('parent method!')
def method(self):
self._init_method()
class B(A):
def __init__(self):
super().__init__()
def method(self):
print('child method!')
b = B()
\u init\u方法
执行您声称需要从A执行的操作。同时,你可以让method
做同样的事情,除非你重写它,在这种情况下,你可以做你想做的任何事情
因为我需要不使用重写的方法调用父构造函数,但每次都需要使用重写的方法
这表示您要求一种方法做的事情太多。将方法
分为两部分:一部分不被A.\uuu init\uuuu调用,另一部分可以被重写。差不多
class A:
def __init__(self):
self._init_method()
def _init_method(self):
print('parent method!')
def method(self):
self._init_method()
class B(A):
def __init__(self):
super().__init__()
def method(self):
print('child method!')
b = B()
\u init\u方法
执行您声称需要从A执行的操作。同时,你可以让method
做同样的事情,除非你重写它,在这种情况下你可以做你想做的任何事情B.method
。在A
的初始化方法中,你可以写A.method(self)
而不是self.method()
要更明确地说明调用哪个方法
。在A
的\uuuu init\uuuuuuuuo()
方法中,您可以编写A.method(self)
而不是self.method()
来更明确地说明调用哪个方法。AFAIK,当您在父对象和子对象中都有类似的方法时,子方法将获得子实例的优先级。为什么不重命名其中一个呢?因为我需要使用无重写方法调用父对象的构造函数,但每次都需要使用重写的构造函数。好的,当父对象和子对象中都有类似的方法时,子对象的实例将优先使用子对象的方法。为什么不重命名其中的一个呢?因为我需要使用无重写方法调用父级的构造函数,但每次都需要使用重写的方法。这解决了问题,但有点粗糙,不太面向对象。我将对此进行投票,但请检查chepner的答案。这是一个很好的解决方案,但我不确定您是否希望在每次创建父实例时调用父方法。这解决了问题,但有点粗糙,不太面向对象。我将对此进行投票,但请检查chepner的答案。这是一个很好的解决方案,但我不确定您是否希望在每次创建父实例时调用父方法。