关于python:如何从我的模块导入和创建我的类?

How to import and create my class from my module?

我正在创建一个模块,它具有以下类:

1
2
3
4
5
6
7
8
9
10
11
12
class LogLevel():

    Info    = 1
    Warn    = 2
    Error   = 3


class FalconPeer():

    def __init__(self, port=37896, log_level=LogLevel.Info):
        self._port = port
        self._log_level = log_level

在文件夹结构中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+---PyFalconUDP
    |   CHANGES.txt
    |   LICENSE.txt
    |   MANIFEST.in
    |   README.txt
    |   setup.py
    |  
    +---falconudp
        |   enums.py
        |   falconpeer.py
        |   tree.txt
        |   __init__.py
        |  
        +---test
        |       test_location.py
        |       test_utils.py
        |       __init__.py

但是在pyfalconudp文件夹中运行python时,我无法导入和使用类——如何创建FalconPeer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (In
    tel)] on win32
    Type"help","copyright","credits" or"license" for more information.
    >>> import falcondup.FalconPeer
    Traceback (most recent call last):
      File"", line 1, in
    ImportError: No module named 'falcondup'
    >>> import falconudp.FalconPeer
    Traceback (most recent call last):
      File"", line 1, in
    ImportError: No module named 'falconudp.FalconPeer'
    >>> import falconudp
    >>> a = FalconUDP()
    Traceback (most recent call last):
      File"", line 1, in
    NameError: name 'FalconUDP' is not defined
    >>> a = falconudp.FalconPeer()
    Traceback (most recent call last):
      File"", line 1, in
    AttributeError: 'module' object has no attribute 'FalconPeer'
    >>> from falconudp import FalconPeer
    Traceback (most recent call last):
      File"", line 1, in
    ImportError: cannot import name FalconPeer
    >>>


分解您的详细信息:

1
2
3
Pkg : falcondup
Module: falconpeer
Class : FalconPeer

使用模块名称导入:

1
import falcondup.falconpeer

使用完整路径创建一个对象,直到类名:

1
obj = falcondup.falconpeer.FalconPeer()

一旦创建了obj,就可以调用类中的所有方法。

类内调用方法:

1
obj.method_name()

如果要访问类属性,请使用类名。

1
2
3
falcondup.falconpeer.LogLevel.Info
falcondup.falconpeer.LogLevel.Warn
falcondup.falconpeer.LogLevel.Error

如果要在内部使用:class_name.class_var_name

另一个场景:

如果loglevel类在不同的文件中,这意味着不同的模块,那么您需要导入该模块,而不能访问它。


要从falconudp模块导入某些内容,它应该位于EDOCX1的全局命名空间中(0)。

因此类声明应该:

  • __init__.py内,或
  • 在falconpeer.py里面,你也应该有import falconpeer__init__.py里面。