所以我正在使用Python创建一个类(使用pybrain)创建一个网络(使用pybrain),只使用它给出的数字输入{只是一个小小的过程让我的脚在Pybrain的API中弄湿}。
我的问题是,我不太熟悉范围在类中的工作方式,虽然我基本上已经正确设置了程序,但它仍然会返回一个关键错误。
需要采取行动的所有变量都是在 init 函数中创建的;我正在为该类工作的方法是尝试调用其中一个变量,使用Python中的vars()[]方法在 init 函数中声明。 (你实际上可以在这里看到代码的一部分......草稿: Matching Binary operators 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。
如何让变量转移过来?如果您需要更多信息来帮助提问,我试图尽可能缩短问题。
答案 0 :(得分:2)
vars()
返回对 local 变量字典的引用。如果您在vars()
中使用__init__
(作为您链接到的帖子中的代码建议),那么您只是在该方法中创建了一个局部变量,该变量无法从该方法之外的任何位置访问。
您认为vars()
做了什么,您想做什么?我希望你想要的是getattr
和setattr
,或者只是字典,而不是vars
。
编辑:根据您的评论,听起来确实不应该使用vars
。你会在__init__
做更好的事情,比如:
self.connections = {}
self.connections[1] = "This is connection 1"
然后在你的方法中,执行:
self.connections[1]
但这只是基于您的代码的模糊猜测。我无法确切地告诉你这个“连接”是什么意思。你想要它是与你的对象相关的一些数据吗?