문제

I am creating a module, it has the classes:

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

In the folder structure:

+---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

But running Python in the PyFalconUDP folder I cannot import and use my classes - how do I create a FalconPeer?

    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
    >>>
도움이 되었습니까?

해결책

Break down your details:

Pkg : falcondup
Module: falconpeer
Class : FalconPeer

Import using the module name:

import falcondup.falconpeer

Create an object using the full path till the class name:

obj = falcondup.falconpeer.FalconPeer()

Once you created the obj, you can call all the method inside the class.

Calling method inside class:

obj.method_name()

And if you want to access class attribute, by using the class name.

falcondup.falconpeer.LogLevel.Info
falcondup.falconpeer.LogLevel.Warn
falcondup.falconpeer.LogLevel.Error

If you want to use inside : class_name.class_var_name

Another scenerio:

if you LogLevel class are in different file which mean different modules, then you need to import that module than you can access it.

다른 팁

To import something from your falconudp module, it should be in the global namespace of __init__.py.

So the class declarations should either:

  1. be inside __init__.py, or
  2. Be inside falconpeer.py, and you should also have import falconpeer inside __init__.py
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top