Python如何在子类方法中访问父类__init__定义的实例变量
问题原因
报错和子类访问父类属性的逻辑无关,核心错误是实例方法的调用方式不对:
- 你写的
child.example()是直接通过类对象调用实例方法,没有提前创建child类的实例。__init__是实例初始化方法,只有创建类实例的时候才会自动执行,你没创建实例,self.item的赋值逻辑根本不会运行,自然会报找不到属性的错误。 - 你在子类
__init__里能打印出item,访问的是__init__方法接收的局部形参,不是绑定到实例上的self.item属性,和继承逻辑没有关系。
修复方案
你的类定义逻辑本身没有问题,只需要修正调用逻辑,先创建类实例,再通过实例调用实例方法即可:
完整可运行代码
class Parent: def __init__(self, item, model): self.item = item self.model = model class child(Parent): def __init__(self, item, model): # 两种父类初始化方式选其一即可,推荐用super()更符合继承规范 # Parent.__init__(self, item, model) super().__init__(item, model) # 这里访问的是__init__的局部形参item print("初始化接收的item参数:", item) def example(self): # 实例初始化完成后,可直接通过self访问父类绑定的实例属性 value = self.item * 10 print("计算结果:", value) # 正确调用流程 if __name__ == "__main__": # 1. 先创建子类实例,传入初始化要求的两个参数,这一步会自动执行__init__完成属性赋值 child_instance = child(item=3, model="v1") # 2. 通过实例调用example方法 child_instance.example()
运行输出
初始化接收的item参数: 3 计算结果: 30
注意事项
- 实例方法必须绑定实例才能正常运行,常规写法是
实例对象.方法名(),不要直接用类名调用实例方法。 - 区分布局变量和实例属性:方法定义里的参数、方法内部直接赋值的变量是局部变量,仅在当前方法内有效;只有绑定到
self上的属性(即self.xxx = xxx)才是实例属性,可以在类的所有实例方法中通过self.xxx访问。 - 子类继承父类时,只要在子类
__init__中调用了父类的__init__方法,父类中绑定到self的所有属性都会被当前实例继承,不需要额外重复定义。
内容的提问来源于stack exchange,提问作者Sunag
相关产品推荐
相关产品推荐

