python-3.x - 如何覆盖父类的init方法,并使用super调用祖父init,而无需编辑父类?(蟒蛇3)
问题描述
我编写了一个继承自 pytorch“DatasetFolder”类的“子”类。
数据集文件夹类的完整代码可在此处获得: https ://pytorch.org/docs/stable/_modules/torchvision/datasets/folder.html#DatasetFolder
我想覆盖那里详述的 init 方法,并用我自己的逻辑替换它。但是,我仍然想调用祖父母 init。
由于父类(datasetfolder)代码是外部包的一部分,我想避免编辑它。
如何覆盖父类的 init 方法,并且仍然调用祖父类 init,而不更改父类?
解决方案
这有点骇人听闻,但有两种方法是直接调用祖父母版本,或者撒谎super
说你是父母,导致在搜索下一个__init__
呼叫时跳过它。所以要么这样做:
class Child(Parent):
def __init__(self, ...args...):
GrandParent.__init__(self, ...args...)
# ... rest of __init__ ...
或者:
class Child(Parent):
def __init__(self, ...args...):
super(Parent, self).__init__(...args...)
# ... rest of __init__ ...