这个类不是描述符类吧?

描述符的定义:
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,但是人家是通过魔术方法实现的!

阅读 2.1k
1 个回答

根据python定义,描述符类需要实现 __get__()、__set__() 和 __delete__() 方法,并且通常用于控制对其他类的属性访问。也就是说,可以对属性的读取和修改进行自定义操作。
比方说举个简单的代码示例:

class Descriptor:
    def __get__(self, instance, owner):
        # 处理属性的读取操作
        pass
    
    def __set__(self, instance, value):
        # 处理属性的赋值操作
        pass

class MyClass:
    attribute = Descriptor()

所以我们现在回过头来看看你的例子里面 Room 类中,虽然说它实现了 __getattribute__() 和 __setattr__() 魔术方法,但是根据定义来看,这并不使它成为描述符类。这两个魔术方法是用于处理对象的属性访问和赋值的通用方法,而不是描述符协议所要求的特定方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进