Python扩展继承类调用自定义方法报AttributeError
报错原因
触发该AttributeError的核心原因有两点:
- 你通过继承语法编写的是原生
derivation.Derivation的自定义子类,新增的autoderive方法只存在于这个子类中;但你实例化时调用的是原始父类的构造方法,生成的是原生类实例,原生类本身没有被修改,因此原生自带方法可正常调用,但找不到你在子类里新增的方法。 - 你定义
autoderive时声明了必填位置参数index,你测试调用时没有传入该参数,就算类逻辑修正后,漏传参数也会触发运行错误。
解决方法
根据二次开发的实际需求二选一即可:
方案1:使用自定义子类实例化
适合仅在自己新增的代码逻辑中使用新方法、不需要改动项目原有实例化逻辑的场景,只需要将实例化的目标类从原始父类替换为你自定义的子类:
from derivations import derivation class Derivation(derivation.Derivation): def autoderive(self, index): # 在这里编写autoderive的具体实现逻辑 pass # 实例化自定义子类,不要调用原始父类的构造方法 deriv = Derivation() # 调用时记得传入必填的index参数 deriv.autoderive(index=0)
方案2:通过猴子补丁给原始类扩展方法
适合需要让项目内所有已有的Derivation实例化逻辑都能直接调用新方法、不需要逐个修改原有实例化代码的场景,无需定义子类,直接给导入的原始类绑定新方法即可:
from derivations import derivation def autoderive(self, index): # 在这里编写autoderive的具体实现逻辑 pass # 直接将新方法绑定到原始类上 derivation.Derivation.autoderive = autoderive # 项目原有实例化逻辑不需要做任何改动,生成的实例可直接调用新方法 deriv = derivation.Derivation() deriv.autoderive(index=0)
内容的提问来源于stack exchange,提问作者invalid syntax
相关产品推荐
相关产品推荐

