一 现象
在python的3.4版本之前,是没有枚举类的。
所以,我自定义实现了一个enum类,目录如下:
代码如下:
class enum(set):
def __getattr__(self, name):
if name in self:
return name
raise AttributeError
if __name__ == '__main__':
Animals = enum(['dog', 'cat', 'horse'])
print Animals.dog
在当前文件enum.py中调用,没有问题。
但是在其它模块中调用时,就出了问题。如下:
from lang import enum
Animals = enum(['dog', 'cat', 'horse'])
print Animals.dog
二 分析
因为类和文件的名称,都是enum,需要加上模块和类的名称。
上述代码只写了一个,自然会报错。
应该写成如下代码:
Animals = enum.enum(['dog', 'cat', 'horse'])
三 总结
这样以来,调用者需要使用enum.enum.的方式,有些繁琐。
原本的目的,是想单独写一个枚举类,但是封装的时候,需要注意模块和类的名称。
在python的3.4版本后,引入了enum这个类,大家可以参考和学习一下它的源码写法。