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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:25:17