【发布时间】:2011-03-29 22:07:34
【问题描述】:
我编写了一个不错的小应用程序,它可以获取 Yahoo 天气信息并将其发布到 Twitter。它完美无缺,现在我想将代码重新排列成不同命名的文件,这样更有意义。那是我遇到一些问题的时候。
以前,我在libtweather.py 中有一个Class。这是我的account。它允许我做accountName.parseFeed() 并且我会得到解析的雅虎天气作为输出。 (__ini__ 将天气 URL、推特用户名和密码作为参数)
这是从我的主脚本访问的,该脚本创建了 Class 的实例,如下所示:exec '%s = lw.twitterWeather("%s", "%s", "%s")' % (item[0], item[1], item[2], item[3])
它将所有帐户名称的列表保存在一个列表中,该列表作为参数传递给其他函数。
另一个函数getWeather 得到了天气:
def getWeather(accountList): #account names passed as a list of strings
for item in accountList:
print item, ': ',
item = eval(item)
print item.parseFeed(), '\n
我现在决定将getWeather 函数移动到与Class 相同的文件中,但item = eval(item) 行给我带来了问题,因为该文件中没有创建任何实例。它们都在主脚本中。
现在我的问题是:有什么方法可以将这些实例作为函数的参数提供?还是我必须将函数放入Class?即使我这样做了,我仍然需要为列表中的多个项目执行item.parseFeed(),所以我仍然需要item = eval(item),不是吗?
提前致谢。我的应用程序有点完整,但如果需要更好地理解,我会发布更多代码。
更新:我最终运行我的libtweather.py 以在导入实例时创建实例,以便其中的函数可以访问它们(在脚本底部添加了实例生成代码)。我敢肯定有更好的方法,但它目前对我有用,我可以接受。
【问题讨论】:
-
您选择使用
exec制作类的实例有什么具体原因吗? -
没有。除了这是我在谷歌上遇到的第一种方式。我知道我可以使用
globals()、vars()或locals()。我现在正在查看它们,看看我要使用哪一个。 -
如果您发现自己需要使用
eval或exec,请不要使用。做点别的。永远不要使用它们。除非您当然需要,否则这就是它们存在的原因,但在您知道您需要它们之前,您必须知道没有没有其他好方法可以做些什么你要。几乎从来没有这种情况。 -
谢谢,我会看看不同的方法。
exec和eval是我开始学习 Python 时唯一知道的事情。我还在学习..
标签: python oop function instance