首页 > 解决方案 > 如何覆盖父类的init方法,并使用super调用祖父init,而无需编辑父类?(蟒蛇3)

问题描述

我编写了一个继承自 pytorch“DatasetFolder”类的“子”类。

数据集文件夹类的完整代码可在此处获得: https ://pytorch.org/docs/stable/_modules/torchvision/datasets/folder.html#DatasetFolder

我想覆盖那里详述的 init 方法,并用我自己的逻辑替换它。但是,我仍然想调用祖父母 init。

由于父类(datasetfolder)代码是外部包的一部分,我想避免编辑它。

如何覆盖父类的 init 方法,并且仍然调用祖父类 init,而不更改父类?

标签: python-3.x

解决方案


这有点骇人听闻,但有两种方法是直接调用祖父母版本,或者撒谎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__ ...

推荐阅读