Python 将实例作为函数参数传递

Python 将实例作为函数参数传递,python,oop,function,instance,Python,Oop,Function,Instance,我写了一个很好的小应用程序,可以获取雅虎的天气信息并发布到Twitter上。它工作得完美无缺,现在我想把代码重新排列成不同名称的文件,这样更有意义。就在那时,我遇到了一些问题 以前,我在libtweather.py上过一节课。这是我的账户。它允许我执行accountName.parseFeed,并将解析后的Yahoo weather作为输出__ini将天气URL、twitter用户名和密码作为参数 这是从我的主脚本访问的,该脚本创建了类的实例,如下所示: exec“%s=lw.twitterWe

我写了一个很好的小应用程序,可以获取雅虎的天气信息并发布到Twitter上。它工作得完美无缺,现在我想把代码重新排列成不同名称的文件,这样更有意义。就在那时,我遇到了一些问题

以前,我在libtweather.py上过一节课。这是我的账户。它允许我执行accountName.parseFeed,并将解析后的Yahoo weather作为输出__ini将天气URL、twitter用户名和密码作为参数

这是从我的主脚本访问的,该脚本创建了类的实例,如下所示: 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函数移动到与类相同的文件中,但行item=evalitem给我带来了问题,因为该文件中没有创建实例。它们都在主脚本中

现在我的问题是:是否有某种方法可以将这些实例作为函数的参数?或者我必须将函数放入类中?即使我这样做了,我仍然需要为列表中的多个项目执行item.parseFeed,所以我仍然需要item=evalitem,不是吗

提前谢谢。我的应用程序在这里整体发布有点困难,但如果需要更好地理解,我会发布更多代码


更新:导入libtweather.py时,我运行libtweather.py创建实例,以便其中的函数可以访问它们。在脚本底部添加了实例生成代码。我确信有更好的方法,但它目前对我有效,我同意。

您应该使用显式dict来存储这些项目。eval、exec、globals、local和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())

您选择使用exec生成类实例有什么具体原因吗?没有。除了这是我在谷歌上遇到的第一条路。我知道我可以用globals、vars或local。我现在正在查看它们,看看我将使用哪一个。如果您发现自己需要使用eval或exec,请不要使用。做点别的吧。永远不要使用它们。当然,除非你需要,这就是为什么他们会在那里,但是在你知道你需要他们之前,你必须知道没有其他好的方式来做你想做的事情。这几乎从来都不是这样。谢谢,我将研究不同的方法。当我开始学习Python时,exec和eval是我唯一知道的东西。我还在学习。我从来没有想到过dict。这个应用程序就是我开始学习Python的方式,直到最近我才开始意识到dict的神奇之处。但是,如果我在与类相同的文件中定义了getWeather,并且在主脚本中生成了与类文件不同的实例,那么我是否可以将此dict作为参数传递给我的函数,并使实例指向类文件中的正确位置,那么函数就不能有lw。无论如何,因为lw永远不会被导入。并感谢*项目[1:];我不知道你能做到。抱歉,但我对这一切还是有点陌生:PSo我终于改变了这一点。不需要太多的改动就可以让我的函数使用dict而不是以前的函数。虽然我没有使用与我最初的问题相同的组织,但我在libtweather.py中创建实例,而不是在主脚本中,我尝试从主脚本将dict传递到libtweather.py中的getWeather函数,结果成功了。实例被接受,没有错误。所以答案被接受了。谢谢