python - 如何将具有 2 个参数的类的字典复制到 2 个列表中
问题描述
我有一个包含 2 个参数列表的类,如果用户确认,我必须将它们保存到 2 个列表中,修改它并从第二行恢复原始列表。这是我的代码:
class Pokemon:
def __init__(self):
self.pokemon = {"Poke_Name": "", "Poke_Specie": "", "Poke_Type": "", "Poke_Weight": "",
"Poke_Height": "", "Poke_Abilities": [], "Poke_Stats": [], "URL": ""}
def set_Poke_Name(self, name):
self.pokemon["Poke_Name"] = name
def set_Poke_Specie(self, specie):
self.pokemon["Poke_Specie"] = specie
def set_Poke_Type(self, tipo):
self.pokemon["Poke_Type"] = tipo
def set_Poke_Weight(self, peso):
self.pokemon["Poke_Weight"] = peso
def set_Poke_Height(self, altezza):
self.pokemon["Poke_Height"] = altezza
def add_Abilities(self, abilita):
self.pokemon["Poke_Abilities"].append(abilita.poke_abilities)
def add_Stats(self, stats):
self.pokemon["Poke_Stats"].append(stats.poke_stats)
def set_url(self, url):
self.pokemon["URL"] = url
def __str__(self):
return str(self.pokemon)
class Poke_Abilities:
def __init__(self):
self.poke_abilities = {"Nome": "", "Speciale": ""}
def set_abilita_nome(self, nome):
self.poke_abilities["Nome"] = nome
def set_abilita_speciale(self, speciale):
self.poke_abilities["Speciale"] = speciale
def __str__(self):
return self.poke_abilities
...
nomi = []
special = []
for j in pok["Poke_Abilities"]:
nomi[j] = j["Nome"]
special[j] = j["Speciale"]
这是错误:
nomi[j] = j["Nome"]
TypeError: list indices must be integers or slices, not dict
解决方案
为什么要创建一个包含所有其他 dict 属性的类?很抱歉这么说,但这是糟糕的设计而不是 pythonic。
你应该这样做:
class Pokemon:
def __init__():
self.name = ""
self.specie = ""
self.type = ""
self.weight = ""
self.height =
self.abilities = []
self.stats = []
self.url = ""
PokeAbilities 也一样。就是这样。没有设置方法。这不是pythonic。您可以设置这样的属性:
pokemon = Pokemon()
pokemon.name = "Pikachu"
或者通过向__init__
函数添加和传递参数。
如果您在设置属性时需要更多控制,请使用properties。
我不完全回答你的问题,但是一旦你做了一个好的设计,错误就会消失。
您还有其他选择,可以使用namedtuples或dataclasses。
推荐阅读
- python-3.x - 平衡二叉树的预排序遍历
- makefile - 有没有办法在 makepp 文件中打开 ifdef/ifeq/else/endif 配对检查?
- python - Google CloudSQLAdmin - 服务帐户没有存储桶所需的权限
- dart - 如何在 Flutter 上将 DatePicker 上的可选日期设置为 3 天?
- reactjs - React 组件方法引用应该在组件卸载中清除吗?
- linux-kernel - 尝试在 /dev 中打开设备文件然后我得到:open() failed with error [No such device]
- python - dlib(setup.py)循环的构建轮
- ios - 为什么共享视频只发送到其他一些应用程序?
- android - 使用带有旋转的android中的画布创建一个有4个段的圆
- sql - 子查询会降低查询性能