在模块之间进行沟通的pythonic方式是什么?
假设我们有以下的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:
;
}
}
那么在Python中,怎么用更“Python风格”的方式来实现这个呢?对我来说,简单的方法是用字符串来代替枚举类型,但我怎么才能确保所有的字符串都写得正确(也就是说,所有文件中的字符串都是一样的)呢?
3 个回答
0
把字符串变成常量,这样你就可以通过名字来引用它们,而不是在代码里到处都是那些看起来没什么意义的字符串。你可以在一个公共的模块或者类里定义这些常量。
2
class Animal:
DOG=1
CAT=2
x = Animal.DOG
2
下面这段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