类中变量的范围有问题吗?

2024-04-26 11:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在用Python创建一个类,该类创建一个网络(使用pybrain),只使用它提供的数字输入{只需要一个小过程,就可以在pybrain的API中让我的脚湿润}。你知道吗

我的问题是,我对作用域在类中的工作方式相当陌生,虽然我基本上正确地设置了程序,但它总是返回一个keyerror。你知道吗

所有需要处理的变量都是在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()[自连接+str(1)],它应该检索变量“Connection1”的值(自连接='Connection'),但调用keyerror。你知道吗

我如何得到要传递的变量?如果你需要更多的信息,尽管问吧,我会尽量缩短提问时间。你知道吗


Tags: 方法函数inself网络init过程connect
1条回答
网友
1楼 · 发布于 2024-04-26 11:16:51

vars()返回对局部变量字典的引用。如果您在__init__中使用了vars()(正如您链接到的文章中的代码所示),那么您只是在该方法中创建了一个局部变量,而该局部变量不能从该方法之外的任何地方访问。你知道吗

你认为vars()做了什么,你想做什么?我有预感你想要的是getattrsetattr,或者只是一本字典,而不是vars。你知道吗

编辑:根据您的评论,听起来确实不应该使用vars。在__init__中,你最好做如下事情:

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

然后在你的方法中,做:

 self.connections[1]

不过,这只是基于代码的模糊猜测。我真的说不出你想要什么“连接”。您希望它是与您的对象关联的一些数据吗?你知道吗

相关问题 更多 >