下面是一些代碼入手:如何動態地創建在Python一類的初始化
def objectify(name, fields):
""" Create a new object including the __init__() method. """
def __init__(self, *argv):
for name, val in zip(var_names, argv):
setattr(self, name, val)
# The following line of code is currently limited to a single dynamic class.
# We would like to extend it to allow creating multiple classes
# and each class should remember it's own fields.
__init__.var_names = fields
result = type(name, (object,), dict(__init__=__init__))
這裏的挑戰是找到一種方法,使具有每個類的__init__()
方法的獨特副本它的變量名稱的靜態列表。
B計劃: 我們可以使用eval()
來運行函數生成的代碼。但要儘可能避免使用eval()
。這裏面臨的挑戰是在沒有eval()
的情況下這樣做。
編輯:雖然寫了這個問題,我想出了一個解決方案。 (見下文)也許這會幫助別人。
編輯2:我會用這個函數來創建類似namedtuple()
的東西,除了它們是可變的。
Point = objectify('point', ['x', 'y'])
a = Point(1, 2)
b = Point(2, 3)
print a.__dict__
print b.__dict__
我加了'EDIT2'來解釋你將如何使用這個函數;有點像一個可變的'namedtuple()'。 – ChaimG
這工作得很好我的解決方案。無需額外的存儲。 – viraptor
我驗證了你的解決方案,你是對的!我很好奇爲什麼這個工程。 – ChaimG