【发布时间】:2010-12-22 10:06:42
【问题描述】:
我正在使用以下类来轻松存储我的歌曲数据。
class Song:
"""The class to store the details of each song"""
attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
def __init__(self):
for att in self.attsToStore:
exec 'self.%s=None'%(att.lower()) in locals()
def setDetail(self, key, val):
if key in self.attsToStore:
exec 'self.%s=val'%(key.lower()) in locals()
我觉得这比写出if/else 块更具可扩展性。但是,eval 似乎被认为是一种不好的做法并且使用起来不安全。如果是这样,任何人都可以向我解释为什么并告诉我定义上述类的更好方法吗?
【问题讨论】:
-
你是怎么知道
exec/eval却还不知道setattr的? -
我相信这是从一篇比较 python 和 lisp 的文章中了解到的,而不是我对 eval 的了解。