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

如何在子类构造函数中获取父类构造函数的属性?

在子类构造函数中获取父类构造函数属性的实现方法

首先修正你代码中的语法错误,然后分场景给出无需向子类传参的实现方案:

原代码的问题

  1. 所有类的__init__方法必须以self作为第一个参数,否则无法绑定实例。
  2. A.number是错误的访问方式——父类A定义的是实例属性self.number,不是类属性。
  3. 实例化B时传入A属于用法错误,子类实例化不需要传入父类本身。

方案1:父类构造函数设默认参数,子类调用父类构造函数

给父类的构造参数设置默认值,子类构造函数通过super()调用父类构造,自动使用默认值,无需传参:

class A:
    def __init__(self, number=10):  # 添加self参数,设置默认值
        self.number = number

class B(A):
    def __init__(self):
        super().__init__()  # 调用父类构造,使用默认参数

test = B()
print(test.number)  # 输出:10

如果后续需要自定义父类属性值,也可以在实例化B时传参(可选):

test3 = B(20)
print(test3.number)  # 输出:20

方案2:父类定义类属性,子类直接继承

如果number是所有父类、子类实例共享的属性,可以定义为父类的类属性,子类会自动继承:

class A:
    number = 10  # 定义类属性

class B(A):
    pass  # 子类无需额外构造函数

test = B()
print(test.number)  # 输出:10

这种方式下,修改父类的类属性会影响所有子类实例:

A.number = 100
print(test.number)  # 输出:100

方案3:子类构造中实例化父类获取属性(不推荐)

如果必须从父类实例获取属性但不想传参,可以在子类构造里创建父类实例并提取属性,但这种方式会产生冗余实例,耦合度高,不推荐使用:

class A:
    def __init__(self, number=10):
        self.number = number

class B(A):
    def __init__(self):
        parent = A()
        self.number = parent.number

test = B()
print(test.number)  # 输出:10

内容的提问来源于stack exchange,提问作者LeetCrash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:50:27