【问题标题】:python import nested classpython导入嵌套类
【发布时间】:2016-07-30 14:49:08
【问题描述】:

我是 python 新手。这不是我的实际情况,只是我对导入嵌套类的好奇。

所以我有一个 ma​​in.pytest.py

test.py

class one():
   class two():
      def twodef():
         pass

所以在我的 ma​​in.py 中,我可以使用 'import test''from test import one'。但是我在执行时出错:'from test.one import two'。

error : ImportError: No module named one

谁能解释一下?

【问题讨论】:

    标签: python import nested


    【解决方案1】:

    您只能对存在于模块全局范围内的名称执行from module import name - 基本上是在顶级模块代码中定义的名称。在较低级别范围内定义的名称 - 例如在您的示例中的类中 - 不可导入。您需要导入包含该名称的对象,然后从那里访问它。

    from test import one
    my_two = one.two()
    

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      from test import one
      
      two_object = one.two()
      two_object.twodef()
      

      【讨论】:

        【解决方案3】:

        test.py 内部

        class One:
            class Two:
                @staticmethod
                def twodef():
                  print("twodef")
        

        我的主要逻辑:

        from test import One
        two_obj = One.Two
        two_obj.twodef()
        

        删除类定义末尾的括号。

        编码标准:

        始终以大写驼峰形式声明您的类名(第一类 => 第一类)。

        For more about scope

        偏好:

        如果您在 python 文件中有一个类,请始终以该类名称命名该文件,但使用小写驼峰式。 (test.py => one.py)。我之前认为这是一个标准,但似乎它被广泛采用。我会使用它,因为如果项目规模扩大并且最终拥有很多类和模块,那么它是合乎逻辑且易于访问的,而不是访问模块来查找类名。 Ref1 Ref2

        【讨论】:

          猜你喜欢
          • 2014-05-18
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多