什么是pythonic方式在模块之间进行通信?

时间:2011-12-07 19:53:27

标签: python interface implementation

让我们假设以下C代码:

// events.h
enum Events  {eOne, eTwo, eThree};
enum Events getEvent(void);

...

//ctrl.c
#include "events.h"

void ctrl(void)
{
    switch(getEvent()) 
    {
    case eOne:
        // ...
        break;
    case eTwo:
        // ...
        break;
    case eThree:
        // ...
        break;
    default:
        ;
    }
}

实现这个的pythonic方法是什么?对我来说,简单的方法是使用字符串而不是枚举,但我怎样才能确保所有字符串都正确输入(即在所有文件中都相同)?

3 个答案:

答案 0 :(得分:2)

class Animal:
    DOG=1
    CAT=2

x = Animal.DOG

来源:How can I represent an 'Enum' in Python?

答案 1 :(得分:1)

以下Python代码与C代码的交互方式类似。要使用其他模块中的变量,您需要先导入该模块。

// events.py
class Events:
    eOne, eTwo, eThree = range(3)

def getEvent():
    # add code for getEvent here (might have been in events.c for C code)
    return some_event

...

// ctrl.py
from events import Events, getEvent
def ctrl():
    event = getEvent()
    if event == Events.eOne:
        # ...
    elif event == Events.eTwo:
        # ...
    elif event == Events.eThree:
        # ...
    else:
        # default

答案 2 :(得分:0)

使字符串成为常量,然后您可以按名称引用它们,这样您就不会在源代码中隐藏魔术字符串。您可以在公共模块或类中定义这些常量。