【发布时间】:2017-10-09 21:42:30
【问题描述】:
在 Python 3.6 文档的“Descriptor HowTo Guide" 的“描述符协议”段落中写着
如果一个实例的字典有一个同名的条目 非数据描述符,字典条目优先
也许我理解错了,但为什么在这个例子中非数据描述符优先于实例条目
class Descriptor:
def __get__( self, instance, owner ):
print( "__get__ is called" )
return self.__dict__[self.name]
def __set_name__( self, owner, name ):
print( "__set_name__ is called" )
self.name = name
self.__dict__[name] = "Hello World"
d = Descriptor()
class MyClass:
data = d
instance_of = MyClass()
instance_of.d = "Goodbye"
print()
print( instance_of.data )
我预计会输出Goodbye。但是输出了Hello World。
【问题讨论】:
-
1. 显示输出很有帮助。 2. 你的意思是
instance_of.data = “Goodbye”? 3. 还有print(instance_of.data)? -
你还没有修正每一个错字。请参阅 2。一旦您这样做了,您将得到再见,因此您的问题将是多余的。
-
你混淆了
data和d。您没有分配给您要读取的属性。投票结束是错字。 -
这不仅仅是一个错字。这是对文档中描述符的“名称”含义的误解。参见示例中新的
__set_name__方法的使用。 -
@Dunes 我不确定。描述符实例中设置的名称与另一个实例上的任一属性名称都不相同。
标签: python python-3.x descriptor