编辑: 我无法使用自己的模块。这是一种愚蠢的浪费时间。如果您遇到同样的问题,请先尝试阅读: 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
中的代码执行此操作我无法克服这一点。请指教,我一定是做错了。
答案 0 :(得分:1)
对我而言,至少,这有效from mod_name import ClassName
当我运行此代码时,我没有收到任何错误。希望这有帮助
编辑:还要确保要导入的模块位于项目目录中。如果您在图像中查看左侧面板,则两个模块都在Stack
中。我希望这是显而易见的,但是,类也需要在您导入的模块中。确保您导入的类不会导入您导入的类,因为这样您就会获得循环依赖。
答案 1 :(得分:1)
试试这种方式
目录custommodule
中的文件 custommodule.pyclass 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
中以避免创建包,在这种情况下您的原始代码应该有效。