Python 3.8+:子类初始化时根据参数决定是否使用父类方法
根据初始化参数动态选择forward方法的实现方案
可以实现,以下是两种适用于Python 3.8及以上版本的可行方案:
方案一:在forward方法内直接判断(推荐)
这是最直观且符合Python编码习惯的方式,直接在子类的forward方法中根据self.time的值决定调用父类还是自身逻辑:
class Parent(object): def __init__(self, time): self.time = time def forward(self): return 0 class Child(Parent): def forward(self): if self.time == 2: return super().forward() return 1
方案二:在__init__中动态替换实例方法
如果需要在初始化阶段就完成方法绑定,可以通过修改实例的forward属性来实现。由于父类的方法需要绑定到当前实例,我们可以利用方法描述器的__get__方法生成绑定后的方法:
class Parent(object): def __init__(self, time): self.time = time def forward(self): return 0 class Child(Parent): def __init__(self, time): super().__init__(time) if self.time == 2: # 将父类的forward方法绑定到当前实例 self.forward = super().forward.__get__(self, Child) def forward(self): return 1
也可以用lambda简化(但性能略逊于上述方式):
self.forward = lambda: super(Child, self).forward()
两种方案都能满足需求,方案一代码更清晰易维护,优先推荐;方案二则适合必须在初始化阶段完成方法替换的场景。
内容的提问来源于stack exchange,提问作者zheyuanWang
相关产品推荐
相关产品推荐

