[英]Pass instance as function argument
我写了一个不错的小应用程序,获取了Yahoo的天气信息并将其发布到Twitter。 它运行得很完美,现在我想将代码重新排列到名称不同的文件中,这样更有意义。 那就是我遇到一些问题的时候。
以前,我在libtweather.py
有一个Class
。 那是我的account
。 它允许我执行accountName.parseFeed()
并获得解析后的Yahoo天气的输出。 ( __ini__
将天气URL,Twitter用户名和密码作为args)
这是从我的主脚本访问的,该脚本创建了Class
实例,如下所示:
exec '%s = lw.twitterWeather("%s", "%s", "%s")' % (item[0], item[1], item[2], item[3])
列表中所有帐户名称的列表,该列表作为参数传递给其他函数。
另一个功能getWeather
通过执行以下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
相同的文件上,但是line item = eval(item)
给我带来了问题,因为在该文件中没有创建任何实例。 所有这些都在主脚本中。
现在我的问题是:有什么办法可以将这些实例作为函数的参数? 还是必须将函数放入Class
? 即使我这样做了,我仍然需要对列表中的多个项目执行item.parseFeed()
,所以我仍然需要item = eval(item)
,不是吗?
提前致谢。 我的应用程序有点完整地发布在这里,但是如果需要更好地理解,我会发布更多代码。
更新:我最终在导入libtweather.py
时运行libtweather.py
来创建实例,以便其内部的函数可以访问它们(在脚本底部添加了实例生成代码)。 我敢肯定有更好的方法,但是目前它对我有效,我对此表示满意。
您应该使用明确的字典来存储这些项目。 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())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.