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