子类中如何访问父类受保护变量?遇AttributeError问题求助
子类访问父类受保护变量的正确方式
你的代码报错有两个关键原因:
- 父类A里只给
_useful加了类型注解,却没有初始化这个属性——Python的类型注解不会自动创建属性,实例化后这个属性根本不存在。 - 哪怕父类初始化了
_useful,用super()._useful访问也不符合Python的惯例,受保护的实例属性应该通过self来访问,super()主要用来调用父类的方法,不是直接访问实例属性。
修正方案
先把父类A的_useful初始化:
class A: def __init__(self): self._useful = {} # 初始化实例属性,也可以加上类型注解:self._useful: dict = {}
然后子类B直接通过self访问_useful:
class B(A): def foo(self, key, value): self._useful.update({key: value})
特殊情况:如果_useful是类属性
要是_useful是父类的类属性(所有实例共享),那可以直接用A._useful或者super()._useful访问,但前提是父类要定义这个类属性:
class A: _useful: dict = {} # 定义类属性 class B(A): def foo(self, key, value): A._useful.update({key: value}) # 或者用 super()._useful.update(...) 也能生效
内容的提问来源于stack exchange,提问作者PsychoBoo
相关产品推荐
相关产品推荐

