描述符的定义:
https://python-reference.readthedocs.io/en/latest/docs/dunder...
In general, a descriptor is an object attribute with “binding behavior”, one whose attribute access has been overridden by methods in the descriptor protocol: __get__(), __set__(), and __delete__(). If any of those methods are defined for an object, it is said to be a descriptor.
下面这个Room类不是描述符吧?
class Room:
def __init__(self,name):
self.name = name
def __getattribute__(self,attr):
return object.__getattribute__(self,attr)
def __setattr__(self,attr,value):
self.__dict__[attr] = value
虽然它的行为有set,get,但是人家是通过魔术方法实现的!
根据python定义,描述符类需要实现 __get__()、__set__() 和 __delete__() 方法,并且通常用于控制对其他类的属性访问。也就是说,可以对属性的读取和修改进行自定义操作。
比方说举个简单的代码示例:
所以我们现在回过头来看看你的例子里面 Room 类中,虽然说它实现了 __getattribute__() 和 __setattr__() 魔术方法,但是根据定义来看,这并不使它成为描述符类。这两个魔术方法是用于处理对象的属性访问和赋值的通用方法,而不是描述符协议所要求的特定方法。