如何在子类构造函数中获取父类构造函数的属性?
在子类构造函数中获取父类构造函数属性的实现方法
首先修正你代码中的语法错误,然后分场景给出无需向子类传参的实现方案:
原代码的问题
- 所有类的
__init__方法必须以self作为第一个参数,否则无法绑定实例。 A.number是错误的访问方式——父类A定义的是实例属性self.number,不是类属性。- 实例化
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
相关产品推荐
相关产品推荐

