Python 将字符串转换为类变量名

Python 将字符串转换为类变量名,python,dictionary,variables,Python,Dictionary,Variables,我的问题如下:我在Python中创建了一个类,让我们想象它是一个具有统计信息、级别等的角色 我还创建了一个字典,其中列出了所有字符名和统计信息,字典的键是字符名 我想创建一个函数,该函数接受字典中的参数,并创建字符作为类的实例。问题是我不知道如何给我的变量指定字符名,通过收集键,我只有与他的名字对应的字符串 例如: class Character(): def __init__(self,Name,Age): self.Nom=Name

我的问题如下:我在Python中创建了一个类,让我们想象它是一个具有统计信息、级别等的角色

我还创建了一个字典,其中列出了所有字符名和统计信息,字典的键是字符名

我想创建一个函数,该函数接受字典中的参数,并创建字符作为类的实例。问题是我不知道如何给我的变量指定字符名,通过收集键,我只有与他的名字对应的字符串

例如:

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