Python如何实现部分继承?调用super()初始化参数缺失报错咨询
问题原因及解决方法
错误根因
- 父类
Bond的构造方法要求必须传入5个位置参数,参数顺序为minTerm、term、amount、minPrice、yrlyRate,你调用super().__init__时仅传入3个参数,且参数顺序和父类要求完全不匹配,因此触发参数缺失报错。 - Python不存在“部分继承父类构造方法”的语法规则:只要你主动调用父类的
__init__方法,就必须完整传入它要求的所有必填参数,不能只传一部分跳过剩下的。
正确实现方式
你想要的复用父类公共属性赋值逻辑、子类仅处理独有属性的需求完全可以实现,只需要按父类要求补全参数即可,示例代码如下:
class Bond(object): def __init__(self, minTerm, term, amount, minPrice, yrlyRate): self.term = term self.amount = amount self.minPrice = minPrice self.minTerm = minTerm self.yrlyRate = yrlyRate class LongTerm(Bond): def __init__(self, term, amount, minPrice, minAmount = 1000, minTerm = 5, yrlyRate = 0.05): # 按父类要求的顺序传入所有参数,已经有默认值的minTerm、yrlyRate直接传入即可 super().__init__(minTerm, term, amount, minPrice, yrlyRate) # 仅对子类独有的属性单独赋值,不需要重复写父类已经处理过的赋值逻辑 self.minAmount = minAmount
这种写法就实现了你想要的效果:公共属性term、amount、minPrice、minTerm、yrlyRate的赋值逻辑复用父类代码,子类仅需要处理自己独有的minAmount属性即可。
内容的提问来源于stack exchange,提问作者Foucault
相关产品推荐
相关产品推荐

