这个问题在2016年被提出,但没有得到回答:
Can a descriptor be assigned to an instance attribute instead of a class attribute?
我有一个基本的描述符
class MyThing:
def __set_name__(self, owner, name):
print(f'Assigned to {name} on {owner}')
self.name = name
def __get__(self, obj, typ):
print(f'Getting {self.name} on {obj}')
return getattr(obj, self.name)
def __set__(self, obj, val):
print(f'Setting {self.name} on {obj} to {val}')
setattr(obj, self.name, val)
是否有可能在运行时将此描述符的实例分配给其他类实例,并使其按照描述符协议运行?
天真的方法失败了:
foo.thing = MyThing()
foo.thing
它的行为不像描述符,它只是表现得像一个典型的实例属性。
这不是XY问题。正如我所述,我特别要求回答这个问题。