__init__无法从单独的.py文件中导入名称

时间:2014-11-14 19:07:36

标签: python

我正在尝试将两个数组从一个python文件(agent.py)传递到一个新模块(moea.py)。 MOEA文件使用PyGMO,如果有人也有任何专业知识。

简而言之,我正在构建两个数组A和B,它们将控制MOEA搜索的机制。

在agent.py中,我有:

self.A = []
self.B = []
*code that fills A and B*
problem = R()

在moea.py中,我有:

import agent

class R(base):
    def __init__(self):
        super(R,self).__init__(len(self.A),0,4)
        self.set_bound(0,len(self.B))

这给出了一个错误,即moea.py找不到对象A或B. __init__的目的是创建一个包含len(self.A)个不同变量的条目,范围介于0和{{1之间}}

编辑: 这个编辑的目的是希望澄清手头的问题。我相信这个问题可以简化为“是否可以将其他.py文件中的数据导入单独的len(self.B)而不改变输入变量的数量。”我在测试其他一些想法时更改了其他一些代码。

agent.py:

__init__

在moea.py我有:

import moea

class Agent:
    def __init__(self, ...)
        self.A = []
        self.test = 2
        *other attribute statements*
    def function(...)
        self.A = [] #To clear the array on subsequent uses
        *code to fill A*
        problem = moea.R()

我的问题是测试语句说Agent属性测试不存在。为什么它能够找到agent.py文件以及该文件中的Agent类,如果它也找不到附加到该类的属性?如果我可以让类R import agent class R(base) #using the _base definition from the link below def __init__(self): print agent.Agent.test super(R,self).__init__(len(agent.Agent.A),0,4) ... 读取一些代理的属性,那么代码就完整了。

有关基类的信息,请访问:PyGMO documentation

1 个答案:

答案 0 :(得分:0)

在agent.py中:

import moea

self.A = []
self.B = []
*code that fills A and B*
problem = moea.R(self.A, self.B)

在moea.py中:

class R(base):
    def __init__(self, A, B):
        super(R,self).__init__(len(A),0,4)
        self.set_bound(0,len(B))

简而言之“明确而不是暗示”并且在你的情况下没有其他方法可以做到没有循环导入(IMO)造成更多的混乱。此外,我将导入更改为另一个文件(我没有看到如果没有导入,R将如何可用)