我一直在玩弄我的代码,最后得到的结果是:
class TestProperty:
def __init__(self,func):
self.func = func
def __set__(self,instance,value):
setattr(instance,self.func.__name__,value)
def __get__(self,instance,cls):
if instance is None:
return self
else:
return getattr(instance,self.func.__name__)
class John(object):
def __init__(self):
pass
@TestProperty
def TestProp(self):
print('This line won\'t be printed')
p = John()
p.TestProp = 99
print(p.TestProp)
我试图理解创建类描述符并将其用于方法而不是属性时的行为。我很难理解到底发生了什么,如果有人能给我一些启示,这将是一个非常好的结果是递归错误?在
我最初的猜测是这样的:
__set__
或{有谁能详细地向我解释一下这是怎么发生的,我怎么解决的?在
除了理解类之外,提供的行为没有其他用途。在
不要使用}只是通过与
getattr()
和setattr()
;您在那里再次触发描述符!描述符处理对TestProp
名称的所有访问,使用setattr()
和{p.TestProp
相同的路径。在直接在
instance.__dict__
中设置属性值:这是因为您有一个数据描述符;数据描述符优先于实例属性。对
p.TestProp
的访问继续使用类上的描述符对象,即使名称'TestProp'
存在于实例__dict__
中。在相关问题 更多 >
编程相关推荐