0

所以我正在用 Python 制作一个类,它只使用它给出的数字输入来创建一个网络(使用 pybrain){只是在 Pybrain 的 API 中让我的脚湿透的一个小过程}。

我的问题是,我对范围在类中的工作方式相当不熟悉,虽然我基本上已经正确设置了程序,但它一直返回一个 keyerror。

所有需要作用的变量都在init函数中创建;我正在为该类工作的方法试图调用一个变量,该变量在init函数中使用 Python 中的 vars()[] 方法声明。(您实际上可以在此处看到代码的一部分……草稿: Matching Binary operator in Tuples to Dictionary Items

无论如何,方法是:

    def constructnetwork(self):
    """constructs network using gathered data in __init__"""
       if self.recurrent:
            self.network = pybrain.RecurrentNetwork  
            #add modules/connections here
       elif self.forward:
            self.network = pybrain.FeedForwardNetwork
       else:
            self.network = pybrain.network

       print vars()[self.CONNECT+str(1)]
       print vars()[self.CONNECT+str(2)]
       print self.network

(请原谅错误的间距,它没有很好地复制和粘贴。)引发 KeyError 的部分是“print vars()[self.CONNECT+str(1)],它应该检索变量的值” Connection1" (self.CONNECT = 'Connection'),但调用了 keyerror。

我如何让变量转移过来?如果您需要更多信息来帮助您询问,我会尽量缩短问题。

4

1 回答 1

2

vars()返回对局部变量字典的引用。如果您vars()在您的__init__(如您链接到的帖子中的代码所建议的那样)中使用,那么您只是在该方法中创建了一个局部变量,该方法无法从该方法之外的任何地方访问。

你认为是什么,你vars()想做什么?我有一种预感,你想要的是getattrand setattr,或者只是一本字典,而不是vars

编辑:根据您的评论,听起来您确实不应该使用vars. 你会更好,在__init__,做一些类似的事情:

 self.connections = {}
 self.connections[1] = "This is connection 1"

然后在你的方法中,做:

 self.connections[1]

不过,这只是基于您的代码的模糊猜测。我无法真正说出您对这种“连接”的意图。您是否希望它是与您的对象相关联的一些数据?

于 2012-07-24T04:26:23.673 回答