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

Python类内部重写已声明变量时遇TypeError初始化参数缺失报错的技术问询

解决你的Bank类初始化错误问题

你遇到的TypeError是因为你的Bank类的__init__方法声明了两个必填参数chosen_word和word,但你实例化类的时候只传了chosen_word一个参数。而且根据你的需求,word是要在类的方法内部赋值的,完全不需要把它作为__init__的参数。

咱们一步步修正你的代码:

第一步:修正__init__方法参数

把word从__init__的参数列表里移除,因为你不需要在实例化时传入它,而是后续在方法里赋值。同时可以提前初始化self.word为None,避免后续访问时出现未定义的问题:

def __init__(self, chosen_word):
    self.chosen_word = chosen_word
    self.word = None

第二步:修正类方法中的变量引用

在choose_theme方法里,直接用chosen_word会找不到这个变量,必须用self.chosen_word来访问实例的属性。另外,split(word)的写法有问题——如果是想把单词拆成单个字符,用list(self.word)更合适;如果是按空格拆分句子才用split()。还有random.choice需要先导入random模块,math和tech也得是提前定义好的单词列表。

第三步:修正实例化代码

现在实例化Bank类只需要传chosen_word一个参数,就不会触发参数缺失的错误了。

完整修正后的代码

import random

# 先定义示例的单词列表
math = ["addition", "subtraction", "multiplication"]
tech = ["python", "javascript", "database"]

class Bank:
    def __init__(self, chosen_word):
        self.chosen_word = chosen_word
        self.word = None  # 提前初始化实例变量

    def choose_theme(self):
        if self.chosen_word == "World":
            self.word = random.choice(math)
            # 生成和单词长度一致的下划线列表
            elements = ['_' for _ in self.word]
            print(elements)
        elif self.chosen_word == "Hello":
            self.word = random.choice(tech)
            elements = ['_' for _ in self.word]
            print(elements)
        else:
            # 处理用户输入非指定主题的情况
            print("Invalid theme choice!")

# 假设temebi是可选主题列表
temebi = ["World", "Hello"]
chosen_word = input(f"choose word: {temebi} ")
levani = Bank(chosen_word)
levani.choose_theme()

额外说明

  • 我调整了下划线生成的逻辑,原来的['_'.format(element) for element in splitten_word]写法不符合预期,改成了生成与单词字符数一致的下划线列表,更贴合猜单词游戏的常见需求。
  • 补充了import random语句,因为random.choice属于标准库模块,必须导入才能使用。
  • 增加了else分支处理非法输入,让程序的健壮性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:12:44