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

Python OOP类继承代码__init__方法报缺少必要位置参数错误求助

错误原因排查
  • 实例化参数不匹配:Checking_Accounts类的构造方法__init__定义了2个必填位置参数savings_accounts、checking_accounts,但实例化时仅传入1个参数BankAccount,是触发本次报错的直接原因。
  • 变量名拼写错误:两个子类的__init__方法中self.checking_accounts = checking_Accounts一行的checking_Accounts未定义,参数名实际为全小写的checking_accounts,大小写不匹配会触发未定义变量报错。
  • 类属性访问错误:displayCounter1中直接调用total_accounts、displayCounter中直接调用checkingsalance,Python会将其识别为局部变量而非类属性,运行时会触发未定义局部变量报错。
  • 继承逻辑不规范:子类继承BankAccount后没有调用父类构造方法,重复编写属性赋值逻辑,不符合面向对象继承的设计规范。
  • 属性名拼写错误:Checking_Accounts的类属性checkingsalance存在拼写错误,建议修正为更规范的checking_balance。
修复后代码
class BankAccount():
    total_accounts = 0

    def __init__(self, savings_accounts, checking_accounts):
        self.savings_accounts = savings_accounts
        self.checking_accounts = checking_accounts
        # 每创建一个账户实例,总账户数+1
        BankAccount.total_accounts += 1

    def displayCounter1(self):
        print(BankAccount.total_accounts)


class SavingsAccounts(BankAccount):
    savings_balance = 5000000.00
    def __init__(self, savings_accounts, checking_accounts):
        # 调用父类构造方法复用逻辑
        super().__init__(savings_accounts, checking_accounts)


class CheckingAccounts(BankAccount):
    checking_balance = 50000000.00
    def __init__(self, savings_accounts, checking_accounts):
        super().__init__(savings_accounts, checking_accounts)
    
    def displayCounter(self):
        print(CheckingAccounts.checking_balance)

# 实例化时传入2个合法参数,示例为储蓄账户1个、支票账户1个
n = CheckingAccounts(1, 1)
n.displayCounter()
n.displayCounter1()
修复说明
  • 实例化CheckingAccounts时传入2个符合要求的位置参数,解决参数缺失报错。
  • 修正所有变量名大小写、拼写错误,避免未定义变量问题。
  • 访问类属性时添加类名前缀,明确访问范围,避免局部变量未定义报错。
  • 子类通过super().__init__()调用父类构造方法,复用初始化逻辑,符合继承设计规范。
  • 优化了类名、属性名的命名规范,符合Python PE8命名要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:03