ava*_*riu 2 python oop function instance
我写了一个很好的小应用程序,获取雅虎天气信息并将其发布到Twitter.它完美无瑕地工作,现在我想将代码重新排列成不同命名的文件,因此它更有意义.那是我遇到一些问题的时候.
以前,我有一个Class在libtweather.py.这是我的account.它允许我这样做,accountName.parseFeed()并且我将获得解析的Yahoo天气作为输出.(__ini__以天气URL,推特用户名和密码为args)
这是从创建的情况下我的主要脚本访问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
Run Code Online (Sandbox Code Playgroud)
我现在决定将该getWeather函数移动到与该文件相同的文件,Class但该行item = eval(item)给我带来了问题,因为该文件中没有创建实例.所有这些都在主脚本中.
现在我的问题是:有什么方法可以将这些实例作为函数的参数给出?或者我必须把功能放入Class?即使我这样做了,我仍然需要为item.parseFeed()列表中的多个项目执行操作,所以我仍然需要item = eval(item),不是吗?
提前致谢.我的应用程序有点在这里完整发布,但如果需要更好地了解我会发布更多代码.
更新:libtweather.py当我导入实例时,我最终运行我创建实例,以便其中的函数可以访问它们(添加了脚本底部的实例生成代码).我确信有更好的方法,但它目前适用于我,我很好.
您应该使用显式dict来存储这些项目.eval,exec,globals,locals,和vars都是可怕的愚蠢办法不好做.请记住Python的禅宗:"明确胜过隐含."
feeds = {}
for item in whatever:
feeds[item[0]] = lw.twitterWeather(*item[1:])
def getWeather(feeds, accountList):
for item in accountList:
print '%s: %s' % (item, feeds[item].parseFeed())
Run Code Online (Sandbox Code Playgroud)