我正在尝试将两个数组从一个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
答案 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将如何可用)