[英]Turn a String into class variable name
我的問題如下:我在 Python 中創建了一個 class 讓我們想象它是一個具有統計數據、級別等的角色......
我還創建了一個字典,其中列出了所有字符名稱和統計信息,字典的鍵是字符的名稱。
我想創建一個 function,它接受字典參數並將字符創建為我的 class 的實例。 問題是我不知道如何將字符名稱賦予我的變量,我只有通過收集密鑰得到與他的名字相對應的字符串。
例子:
class Character():
def __init__(self,Name,Age):
self.Nom=Name
self.Age=Age
List_Character= {"Roger" : 36, "Kimberley" : 98}
如何創建一個 function,它采用 List_Character 並返回兩個變量名為 Roger 和 Kimberley 的 Character 實例?
嘗試以下操作:
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)
雖然__repr__
方法不是絕對必要的,但沒有它,代碼仍然可以工作,它只是提供了更好的表示。
function 可以使用itertools.starmap
縮短/優化:
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
您需要做的就是遍歷您的 dict 並從中創建新字符,append 將它們放入一個列表並返回此列表:
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 中的數量。
#Edit:如果您想按名稱訪問字符,您可以使用 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.