Python类继承中super对象访问word_weighting属性报AttributeError问题问询
报错原因分析
super()是Python提供的父类方法代理对象,仅用于调用父类中定义的方法,不支持访问实例属性。你在父类FTM的构造方法中给self.word_weighting赋值,该属性是绑定在子类FLSA的实例对象上的,和super()代理对象没有关联。- 代码中
super().word_weighting的写法尝试从super代理对象上查找不存在的实例属性,因此触发AttributeError。
修复方案
直接通过实例本身self访问继承得到的word_weighting属性即可,修改后的子类代码如下:
class FLSA(FTM): def __init__(self, word_weighting='normal'): super().__init__(word_weighting = word_weighting) self.sparse_global_term_weighting = super().get_sparse_global_term_weights(word_weighting = self.word_weighting)
补充说明
所有实例属性无论在父类还是子类中赋值,都是绑定在当前实例对象上的,直接通过self.属性名就可以正常访问,只有当你需要调用父类中被子类重写的同名方法时,才需要使用super()代理调用。
内容的提问来源于stack exchange,提问作者Emil
相关产品推荐
相关产品推荐

