其中的包,模块和类

时间:2015-04-07 13:17:48

标签: python module package

什么是"正确"当我的类是模块的一部分时导入/使用classmethods的方法吗?

我为我的同事创建了一个Python实用程序,基本上使用了我的Java知识,Stack Overflow和Google。它工作正常,但经验丰富的Python人员审查了所有内容并建议改进代码的pythonicity。

最初,我刚刚使用sys.path.append()添加了包含许多.py个文件的子目录(基本上每个.py中有一个类)。

现在我正在尝试使用软件包和模块:

  1. 我在根目录和所有子目录中添加了(空)__init__.py个文件;
  2. 我将所有课程改为" modules",在第1行添加__name__ = "whatever-filename"
  3. 而且,进口工作。在我的主脚本中,我可以做到

    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..."""
    ...
    

2 个答案:

答案 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()