You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何在子类方法中访问父类__init__定义的实例变量

问题原因

报错和子类访问父类属性的逻辑无关,核心错误是实例方法的调用方式不对:

  1. 你写的child.example()是直接通过类对象调用实例方法,没有提前创建child类的实例。__init__是实例初始化方法,只有创建类实例的时候才会自动执行,你没创建实例,self.item的赋值逻辑根本不会运行,自然会报找不到属性的错误。
  2. 你在子类__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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:31:41