我试图实现*一个类/类型,以用作dict
的键的枚举器。我想修改返回的属性值,例如,对于自定义类:
class TestKeys(Keys):
one = 1
two = 2
而不是让TestKeys.one
返回1
,我想覆盖它以返回类似的内容( string )"TestKeys.one"
。我尝试过以下操作,但它会进入无限递归......
class _Keys_Meta(type):
# Store all attribute values to list ``__values__``
# (if they dont start with '__')
def __init__(self, name, bases, dict):
self.__init__(self)
self.__values__ = [ self.__dict__.values()[ii] for ii,ent
in enumerate(self.__dict__)
if not ent.startswith('__') ]
def __getattribute__(self, attr):
if( not hasattr(self, '__values__') ):
self.__values__ = []
if( attr in self.__values__ ):
return "{:s}.{:s}".format(self.__name__, str(attr))
return object.__getattribute__(self, attr)
class Keys(object):
__metaclass__ = _Keys_Meta
如何修改访问属性时返回的值?
*我熟悉enum34,但我不喜欢它的一些功能。