首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__init__无法从单独的.py文件导入名称

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

Stack Overflow用户
提问于 2014-11-15 03:07:36
回答 1查看 237关注 0票数 0

我尝试将两个数组从一个python文件(agent.py)传递给一个新模块(moea.py)。MOEA文件利用了PyGMO,如果有人也有这方面的专业知识的话。

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

在agent.py中,我有:

代码语言:javascript
复制
self.A = []
self.B = []
*code that fills A and B*
problem = R()

在moea.py中,我有:

代码语言:javascript
复制
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和len(self.B)之间。

编辑:此编辑的目的是希望澄清手头的问题。我相信这个问题可以简化为“是否可以在不更改输入变量数量的情况下将数据从其他.py文件导入到单独的__init__中”。在测试一些其他想法的同时,我更改了一些其他代码。

agent.py:

代码语言:javascript
复制
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()

在moea.py中,我有:

代码语言:javascript
复制
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)
        ...

我的问题是测试语句说Agent属性测试不存在。如果它不能同时找到附加到agent.py文件和该文件中的代理类的属性,那么它为什么能够找到该类呢?如果我能让类R的__init__读取代理的一些属性,那么代码就完整了。

有关基类的信息可以在以下位置找到:PyGMO documentation

EN

回答 1

Stack Overflow用户

发布于 2014-11-15 04:21:37

在agent.py中:

代码语言:javascript
复制
import moea

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

在moea.py中:

代码语言:javascript
复制
class R(base):
    def __init__(self, A, B):
        super(R,self).__init__(len(A),0,4)
        self.set_bound(0,len(B))

简而言之,“显式比隐式更好”,在你的情况下,没有循环导入(IMO)就没有其他方法可以做到这一点,这会造成更多的混乱。此外,我将导入更改为另一个文件(我不知道如果没有导入,R将如何可用)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26937145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档