在元类中实现数据描述符的正确方法是什么?在下面的(简单的)示例中,我希望始终在设置所需的值之前附加一个问号:
class AddQDesc:
def __init__ (self, name):
self.name = name
def __get__ (self, instance, owner=None):
obj = instance if instance != None else owner
return obj.__dict__[self.name]
def __set__ (self, instance, value):
# What should go here ?
#setattr(instance, self.name, "{}?".format(value)) <- This gives me recursion error
#instance.__dict__[self.name] = "{}?".format(value) <- This gives me proxymapping error
pass
class Meta (type):
var = AddQDesc("var")
class C (metaclass=Meta):
var = 5
print(C.var)
C.var = 1
print(C.var)
首先,当我将 var 初始化为 5 时,似乎没有使用描述符。我也可以在这里应用描述符协议吗?(设为“5?”)其次,在 __set__ 方法中应该如何更新值?更新 __dict__ 给我"TypeError: 'mappingproxy' object does not support item assignment"并使用 setattr 给我"RecursionError: maximum recursion depth exceeded while calling a Python object"。