定义了__getattribute__的Room类是否属于Python描述符?
Room类是否属于描述符?
首先明确Python官方对描述符的定义:
描述符是实现了描述符协议中任意一个方法的属性值,这些方法包括
__get__()、__set__()和__delete__()。若一个属性定义了其中任一方法,则被称为描述符。
再看给出的Room类代码:
class Room: def __init__(self,name): self.name = name def __getattribute__(self,attr): return object.__getattribute__(self,attr) def __setattr__(self,attr,value): return object.__setattr__(self,attr,value)
严格来说,Room类不属于描述符,理由如下:
__getattribute__和__setattr__是Python中控制实例属性访问的通用魔法方法,属于实例层面的属性拦截逻辑,并不在描述符协议规定的方法列表内。- 描述符的核心是作为类属性存在,通过实现
__get__/__set__/__delete__来代理其他属性的访问;而Room类的这两个方法是为自身实例的属性访问提供逻辑,完全不符合描述符的定义范畴。
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

