在参考文档中:http ://docs.python.org/2/library/functions.html#type 展示了如何定义成员变量 X = type('X', (object,), dict(a=1 ))
但是如何定义一个成员函数,所以类可以等价于:
class X(object):
a = 1
def get_a(self):
return self.a
这个问题是通过向给定的自定义枚举类型添加可迭代特性而产生的。在我的项目中,这里有一个旧的自定义枚举类型:
def enum(*sequential, **named):
""" Contruct an enum """
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.items())
enums['reverse_mapping'] = reverse
return type('Enum', (), enums)
它可以像这样使用:
MY_COLORS = enum(RED=0,BLUE=1)
但是此方法定义的枚举不能用作“for in”语句中的可迭代对象。我希望添加一个成员函数来返回枚举的键、值和项。然后我可以做这样的事情:
[item for item in MY_COLORS.keys()]
python3的答案:
def enum(*sequential, **named):
""" Contruct an enum """
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.items())
key_names = list(enums.keys())
enums['reverse_mapping'] = reverse
@classmethod
def keys(klass):
return key_names
enums['keys'] = keys
return type('Enum', (), enums)