Python 将字符串转换为类变量名
我的问题如下:我在Python中创建了一个类,让我们想象它是一个具有统计信息、级别等的角色 我还创建了一个字典,其中列出了所有字符名和统计信息,字典的键是字符名 我想创建一个函数,该函数接受字典中的参数,并创建字符作为类的实例。问题是我不知道如何给我的变量指定字符名,通过收集键,我只有与他的名字对应的字符串 例如:Python 将字符串转换为类变量名,python,dictionary,variables,Python,Dictionary,Variables,我的问题如下:我在Python中创建了一个类,让我们想象它是一个具有统计信息、级别等的角色 我还创建了一个字典,其中列出了所有字符名和统计信息,字典的键是字符名 我想创建一个函数,该函数接受字典中的参数,并创建字符作为类的实例。问题是我不知道如何给我的变量指定字符名,通过收集键,我只有与他的名字对应的字符串 例如: class Character(): def __init__(self,Name,Age): self.Nom=Name
class Character():
def __init__(self,Name,Age):
self.Nom=Name
self.Age=Age
List_Character= {"Roger" : 36, "Kimberley" : 98}
如何创建一个函数,该函数接受List\u Character并返回变量名为Roger和Kimberley的两个Character实例?您需要做的就是迭代dict并从中创建新字符,将它们附加到列表中并返回此列表:
class Character():
def __init__(self,Name,Age):
self.Nom=Name
self.Age=Age
List_Character= {"Roger" : 36, "Kimberley" : 98}
def create_characters(char_dict):
return_list = []
for k,v in char_dict.items():
return_list.append(Character(k,v))
return return_list
print(create_characters(List_Character)[0].Nom, create_characters(List_Character)[0].Age)
返回:
Roger 36
我假设“返回两个实例”,你指的是一个包含所有实例的列表,对吗?因为我想你不只是想有2个实例,而是想有尽可能多的dict作为输入
#编辑:
如果要按字符名称访问字符,可以使用dict:
def create_characters(char_dict):
return_dict = dict()
for k,v in char_dict.items():
return_dict[k] = Character(k,v)
return return_dict
dict_of_chars = create_characters(List_Character)
print(dict_of_chars["Roger"].Age)
请尝试以下操作:
class Character():
def __init__(self,Name,Age):
self.Nom=Name
self.Age=Age
def __repr__(self):
return f"{self.__class__.__name__}(Name={self.Nom}, Age={self.Age})"
List_Character= {"Roger" : 36, "Kimberley" : 98}
def create_instance(cls, params: dict):
ret = ()
for k,v in params.items():
globals()[k] = cls(k, v)
ret = ret + (globals()[k],)
return ret
>>> create_instance(Character, List_Character)
(Character(Name=Roger, Age=36), Character(Name=Kimberley, Age=98))
>>> Roger
Character(Name=Roger, Age=36)
>>> Kimberley
Character(Name=Kimberley, Age=98)
虽然\uuuuu repr\uuuuu
方法不是严格必需的,但是如果没有它,代码仍然可以工作,它只是提供了更好的表示
可使用以下方法缩短/优化该功能:
嗨,谢谢你的回答。是的,如果我的字典有1000个字符,我希望有1000个与字符名同名的变量。如果我理解得很透彻,函数返回一个包含字符的列表,但这里变量名是列表中的索引,而不是字符的名称。例如,我想要打印(Roger.Age)。如果这不起作用,您可以返回一个dict,这样您就可以再次按名称访问字符-例如,
dict\u of chars[“Roger”]。Age
。或者你说Roger=list of chars[0]
,然后你可以使用Roger.Age
。但是如果你有1000个字符,这就没有意义了,对吧?
from itertools import starmap
def create_instance(cls, params: dict):
keys, vals = params.keys(), tuple(starmap(cls, params.items()))
globals().update(dict(zip(keys, vals)))
return vals