Python继承问题:如何将父类的用户输入值传递给子类
问题解决方法
你的代码存在实例方法定义错误、属性访问方式错误、子类方法命名错误等问题,同时要实现父类计算值向子类传递,可按以下方式重构:
核心思路
将用户输入、联邦税计算逻辑整合到父类的初始化流程中,把计算结果存为实例属性,子类继承后直接通过self访问这些属性,无需手动传递参数。
重构后的完整代码
class Tax(): federal_tax_rate = 0.10 def __init__(self): # 在初始化时完成用户输入与联邦税计算 self.user_name = input("Enter name: ") self.user_pre_tax = int(input("Enter pre tax amount: ")) self.federal_tax_amount = self.user_pre_tax * self.federal_tax_rate self.after_federal_tax_amount = self.user_pre_tax - self.federal_tax_amount print("Federal Tax Amount: ", self.federal_tax_amount) class OregonTax(Tax): oregon_tax_rate = 0.03 def calculate_oregon_tax(self): # 直接使用继承自父类的属性计算州税 self.oregon_tax_amount = self.user_pre_tax * self.oregon_tax_rate self.after_oregon_tax_amount = self.after_federal_tax_amount - self.oregon_tax_amount print("Oregon Tax Amount: ", self.oregon_tax_amount) class WashingtonTax(Tax): wa_tax_rate = 0.04 def calculate_wa_tax(self): # 修正方法名,对应华盛顿州税逻辑 self.wa_tax_amount = self.user_pre_tax * self.wa_tax_rate self.after_wa_tax_amount = self.after_federal_tax_amount - self.wa_tax_amount print("Washington Tax Amount: ", self.wa_tax_amount) # 使用示例 oregon_user = OregonTax() oregon_user.calculate_oregon_tax() wa_user = WashingtonTax() wa_user.calculate_wa_tax()
关键修正点
- 实例方法定义:所有实例方法添加
self参数,确保能访问实例属性; - 属性存储:将用户输入和计算结果存为实例属性,子类继承后可直接调用;
- 子类方法命名:修正
WashingtonTax中的错误方法名,保证逻辑与方法名对应; - 自动初始化:实例化子类时自动执行父类的
__init__,完成输入与联邦税计算,无需手动传入参数。
可选方案:分离输入与初始化逻辑
如果不想在__init__中处理用户输入,可使用类方法封装输入流程,实现逻辑分离:
class Tax(): federal_tax_rate = 0.10 def __init__(self, user_name, user_pre_tax): self.user_name = user_name self.user_pre_tax = user_pre_tax self.federal_tax_amount = self.user_pre_tax * self.federal_tax_rate self.after_federal_tax_amount = self.user_pre_tax - self.federal_tax_amount print("Federal Tax Amount: ", self.federal_tax_amount) @classmethod def from_user_input(cls): # 单独的输入逻辑,生成并返回实例 user_name = input("Enter name: ") user_pre_tax = int(input("Enter pre tax amount: ")) return cls(user_name, user_pre_tax) class OregonTax(Tax): oregon_tax_rate = 0.03 def calculate_oregon_tax(self): self.oregon_tax_amount = self.user_pre_tax * self.oregon_tax_rate self.after_oregon_tax_amount = self.after_federal_tax_amount - self.oregon_tax_amount print("Oregon Tax Amount: ", self.oregon_tax_amount) # 使用示例 oregon_user = OregonTax.from_user_input() oregon_user.calculate_oregon_tax()
内容的提问来源于stack exchange,提问作者John H.
相关产品推荐
相关产品推荐

