創建的類我正在滾動我自己的Enum
類,因爲我無法使__str__
和__repr__
正常工作,我做錯了什麼?不能動態綁定__repr __/__ str__到類型
In [2]: x = Enum(X=1, Y=2)
In [3]: x
Out[3]: common.utils.Enum
In [4]: str(x)
Out[4]: "<class 'common.utils.Enum'>"
In [5]: x.__repr__
Out[5]: <bound method type.reprfun of <class 'common.utils.Enum'>>
In [6]: x.__repr__()
Out[6]: 'Enum(Y=2, X=1)'
代碼本身:
def Enum(*args, **kwargs):
enums = dict(zip(args, range(len(args))), **kwargs)
def reprfun(self):
res = 'Enum(' +\
', '.join(map(lambda x: '{}={}'.format(x[0],x[1]), enums.items())) +\
')'
return res
reverse = dict((value, name) for name, value in enums.items())
typedict = enums.copy()
typedict['name'] = reverse
instance = type('Enum',(), typedict)
instance.__repr__ = types.MethodType(reprfun, instance)
instance.__str__ = types.MethodType(reprfun, instance)
return instance
你應該綁定'__repr__'到類,而不是實例。 – Bach
你在使用內建枚舉(http://docs.python.org/3.4/library/enum.html),這是一個還是不同的實現的後端? - 納米 - 我看到你在滾動你自己的。你應該看看python源代碼中的實際枚舉類的實現。 – underrun