繁体   English   中英

将实例作为函数参数传递

[英]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来创建实例,以便其内部的函数可以访问它们(在脚本底部添加了实例生成代码)。 我敢肯定有更好的方法,但是目前它对我有效,我对此表示满意。

您应该使用明确的字典来存储这些项目。 evalexecglobalslocalsvars都是糟糕的愚蠢方法。 请记住,从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM