【问题标题】:python 3.4: Cannot import class from another filepython 3.4:无法从另一个文件导入类
【发布时间】:2016-03-10 17:30:27
【问题描述】:

这样的问题在这里出现了多次,但没有一个答案对我有用。我使用 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 移动到它自己的文件中,并且成功了!谢谢大家!

【问题讨论】:

    标签: python class import


    【解决方案1】:

    您的模块看起来正确,应该可以工作。 最可能的错误来源是正在导入另一个名为 make_layers.py 的文件。要检查这一点,请打印 ml.__file__ 以查看 make_layers 模块是从哪里导入的。

    【讨论】:

      【解决方案2】:

      如果您在 Linux 上,要导入您自己的 classes,您需要将它们放入您的 $PYTHONPATH 环境变量中。

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

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

      其次,要让 PyC​​harm 识别脚本中的可导入类,您必须将目录标记为 sources root。在这个 PyCharm 之后应该看到你在ml 中有一个Finder

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-21
        • 1970-01-01
        • 2020-02-03
        • 2021-02-10
        相关资源
        最近更新 更多