Python:无法从我的模块加载类

时间:2015-05-06 20:00:56

标签: python module

编辑: 我无法使用自己的模块。这是一种愚蠢的浪费时间。如果您遇到同样的问题,请先尝试阅读: http://docs.python-guide.org/en/latest/writing/structure/

我刚开始使用Python进行OOP,我对模块和类感到困惑。

我使用Mac,我可以编写自己的模块并从site-packages文件夹加载它们。

现在我想用有用的类创建模块。 import custom_module有效。 但如果custom_module有一个类Custom_class,那么事情就行不通了。

我尝试过: (编辑:对不起,我正在删除已经编写的旧代码,这是我刚才使用的并且不起作用)

在custommodule.py中:

class Customclass:
    def __init__(self, name):
        self.name = name

此模块加载时没有错误。 然后我得到:

new = custommodule.Customclass('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Customclass'

顺便说一句,我开始尝试使用此tutorial

中的代码执行此操作

我无法克服这一点。请指教,我一定是做错了。

3 个答案:

答案 0 :(得分:1)

对我而言,至少,这有效from mod_name import ClassName mod2 mod1 Runs fine

当我运行此代码时,我没有收到任何错误。希望这有帮助

编辑:还要确保要导入的模块位于项目目录中。如果您在图像中查看左侧面板,则两个模块都在Stack中。我希望这是显而易见的,但是,类也需要在您导入的模块中。确保您导入的类不会导入您导入的类,因为这样您就会获得循环依赖。

答案 1 :(得分:1)

试试这种方式

目录custommodule

中的文件 custommodule.py
class Customclass:
    def __init__(self, name):
        self.name = name

文件__init__.py int他的custommodule目录

from .custommodule import CustomClass

注意 custommodule之前的点。这会强制init从同一目录加载模块。

没有圆点,它可以在python2下工作,但不能在python3下工作

答案 2 :(得分:1)

使用此文件布局

site-packages/custommodule/__init__.py
site-packages/custommodule/custommodule.py

您正在创建一个名为custommodule的包,其中包含名为custommodule的模块 。您的代码需要看起来像

import custommodule
# or more specifically,
# import custommodule.custommodule
new = custommodule.custommodule.Customclass('foo')

from custommmodule import custommodule
new = custommodule.Customclass('foo')

您也可以将custommodule.py直接放在site-packages中以避免创建包,在这种情况下您的原始代码应该有效。