python - 当方法被孩子覆盖时,在 super().__init__ 中调用父方法
问题描述
我已经覆盖了子类中的方法。该方法在父类构造函数中使用。在子类中调用super().__init__
时,在父类的构造函数中执行子类的方法而不是父类的方法。
例子:
class A:
def __init__(self):
self.method()
def method(self):
print('parent method!')
class B(A):
def __init__(self):
super().__init__()
def method(self):
print('child method!')
b = B()
输出:child method!
虽然我想得到parent method!
编辑:
我需要父类的构造函数来使用未覆盖的方法,但之后method()
从父类调用的每个调用都应该调用覆盖的方法。
解决方案
因为我需要使用不覆盖的方法调用父级的构造函数,但是我每次都需要使用覆盖的构造函数。
这表明您要求一种方法做太多事情。分为method
两部分:一个不被覆盖并由 调用A.__init__
,另一个可以被覆盖。就像是
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()
_init_method
做你声称需要做的事情A.__init__
。同时,你可以method
做同样的事情,除非你覆盖它,在这种情况下你会做任何你想做B.method
的事情。
推荐阅读
- pic - EZBL_EraseAll 或 EZBL_NVMKEY 在 mplab x IDE 版本 5.4 中不起作用
- openid-connect - 如何处理 OIDC 服务器从 ASP.Net Core 应用程序关闭
- javascript - 将 json 数据传递到输入字段
- python-3.x - 如何使用 Selenium 和 Python 遍历 url 列表
- javascript - 如何将图像移至底部?
- svelte - 从商店发出 AJAX 请求
- python - python中所有ec2实例的csv输出
- python - 如何有效地循环字典,我应该使用另一种数据结构
- go - 去执行 http.ListenAndServe("8080",nil) 但进程退出
- autodesk-forge - 屏幕截图中的 Autodesk 标记定位错误