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
相关产品推荐
相关产品推荐

