什么是"正确"当我的类是模块的一部分时导入/使用classmethods的方法吗?
我为我的同事创建了一个Python实用程序,基本上使用了我的Java知识,Stack Overflow和Google。它工作正常,但经验丰富的Python人员审查了所有内容并建议改进代码的pythonicity。
最初,我刚刚使用sys.path.append()
添加了包含许多.py
个文件的子目录(基本上每个.py
中有一个类)。
现在我正在尝试使用软件包和模块:
__init__.py
个文件; __name__ = "whatever-filename"
。而且,进口工作。在我的主脚本中,我可以做到
from classes import MyHelper
(其中classes
指的是子目录,MyHelper
指的是其中的模块。但是:
MyHelper.some_class_method()
给了我:
Traceback (most recent call last):
File "./xyz", line 12, in <module>
MyHelper.some_class_method()
AttributeError: 'module' object has no attribute 'some_class_method'
但我没有改变MyHelper
- 它仍然包含我在引入包/模块之前可以使用的所有@classmethod
。
编辑:MyHelper看起来像这样:
__name__ = "MyHelper"
...
class MyHelper(object):
"""This class..."""
...
答案 0 :(得分:1)
MyHelper
引用导入时的模块名称,而不是类名相同。您可以尝试以下导入,以从子目录中的模块导入类。
from classes.MyHelper import MyHelper
MyHelper.calling_my_class_method_here()
答案 1 :(得分:-1)
来自X import Y
实际上是将模块X中的类或函数Y导入到当前模块的命名空间中,您可以直接使用Y.
或者,如果您刚刚导入模块X,例如
导入X
然后你将函数(或类)Y称为X.Y.所以在你的情况下,试试吧
导入MyHelper
MyHelper.some_class_method()