Python新手向列表添加类实例时append报不接受关键字参数错误如何解决
错误原因
Python的list.append()方法仅支持接收1个位置参数(即你要存入列表的元素),不支持传入关键字参数。你写的Starters.append(Botamon = Digi("Botamon",0,1,1,1,1,[""]))属于给append方法传递了名为Botamon的关键字参数,不符合方法的参数要求,因此抛出TypeError。
你原本想实现「同时给实例绑定变量名+存入列表」的思路没问题,但语法使用错误,不能将变量赋值操作写在append的参数括号内。
优化方案
方案1:无需单独使用变量名,仅需把实例存入列表
直接删除append参数中等号左侧的变量名即可,修改后代码可以正常运行:
Starters = [] Starters.append(Digi("Botamon",0,1,1,1,1,[""])) Starters.append(Digi("Poyomon",0,1,1,1,1,[""])) Starters.append(Digi("Punimon",0,1,1,1,1,[""])) Starters.append(Digi("Yuramon",0,1,1,1,1,[""])) Digilist = [] Digilist.append(Digi("Koromon",1,3,3,3,3,["Botamon"])) Digilist.append(Digi("Tokomon",1,3,3,3,3,["Poyomon"])) Digilist.append(Digi("Tsunomon",1,3,3,3,3,["Punimon"])) Digilist.append(Digi("Tanemon",1,3,3,3,3,["Yuramon"]))
该方案完全不影响后续random.choice(Starters)取实例的逻辑。
方案2:需要保留单独的变量名供后续调用
将赋值和添加到列表的操作拆分即可:
# 初始化实例+绑定变量 Botamon = Digi("Botamon",0,1,1,1,1,[""]) Poyomon = Digi("Poyomon",0,1,1,1,1,[""]) Punimon = Digi("Punimon",0,1,1,1,1,[""]) Yuramon = Digi("Yuramon",0,1,1,1,1,[""]) # 批量添加到列表 Starters = [Botamon, Poyomon, Punimon, Yuramon]
方案3:批量生成减少重复代码(推荐)
你的实例参数重复度很高,完全可以用列表推导式批量生成,不用逐个写append,同时补全你漏写的random导入、修改歧义变量名:
import random # 原代码漏了导入random模块,不加这行后续随机选择会报错 class Digi: def __init__(self,mon,age,offense,defense,speed,brains,evo): self.mon = mon self.age = age self.offense = offense self.defense = defense self.speed = speed self.brains = brains self.evo = evo # 批量生成初始数码兽列表 starter_names = ["Botamon", "Poyomon", "Punimon", "Yuramon"] Starters = [Digi(name, 0, 1, 1, 1, 1, [""]) for name in starter_names] # 批量生成进化后数码兽列表 digi_config = [ ("Koromon", ["Botamon"]), ("Tokomon", ["Poyomon"]), ("Tsunomon", ["Punimon"]), ("Tanemon", ["Yuramon"]), ] Digilist = [Digi(name, 1, 3, 3, 3, 3, evo) for name, evo in digi_config] # 随机选择初始数码兽,注意不要用self作为普通变量名,self是类方法里约定指代实例的保留字 starter = random.choice(Starters) name = starter.mon
内容的提问来源于stack exchange,提问作者KontonAkumu
相关产品推荐
相关产品推荐

