python 3.4:无法从另一个文件导入类

时间:2016-03-10 17:30:27

标签: python class import

这样的问题多次出现在这里,但没有一个答案对我有用。我使用Python 3.4和PyCharm作为我的IDE。在文件make_layers.py中,我有一个类的小占位符(np是我导入的numpy):

class Finder:
    def __init__(self):
        pass
    def get_next_shape(self, uses_left):
        mask = np.zeros(uses_left.shape, dtype=np.int16)
        return mask

在同一目录中的另一个文件box_finder.py中,我尝试导入该类并创建一个子类:

import make_layers as ml

class BoxFinder(ml.Finder):
    def __init__(self):
        pass

当我尝试运行它时,它在import语句失败,说

AttributeError: module 'make_layers' has no attribute 'Finder'

我尝试了无穷无尽的语法变体(包括from make_layers import Finder之类的内容),但没有任何效果。它必须是显而易见的东西,但我无法看到问题。任何帮助将不胜感激!

编辑:安提,你钉了它。那里有一个偷偷摸摸的循环导入。我将Finder移到了自己的文件中,并取得了成功!谢谢大家!

2 个答案:

答案 0 :(得分:1)

您的模块看起来正确,应该可行。 最可能的错误来源是正在导入另一个名为make_layers.py的文件。要进行检查,请打印ml.__file__以查看导入make_layers模块的位置。

答案 1 :(得分:0)

如果您使用的是Linux,要导入自己的class es,需要将它们放入$ PYTHONPATH环境变量中。

export PYTHONPATH=$PYTHONPATH:/where/the/file/is

如果是这种情况,我建议将此行放在.bashrc中,以避免在每次重启后进行导出

其次,要使PyCharm识别脚本中的可导入类,必须将目录标记为sources root。在此PyCharm之后,您应该看到Finder

中有ml个班级