当前位置: 首页 > 知识库问答 >
问题:

python3.x - 这个类不是描述符类吧?

虞安康
2023-08-06

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

共有1个答案

钱震博
2023-08-06

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

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

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

 类似资料:
  • 问题内容: 什么是类描述符? 它是特定类的对象吗? 问题答案: 是的,对象是某个“类”的类描述符。 从API中: 此类的实例表示正在运行的Java应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组还属于一个反映为Class对象的类,该类对象由元素类型和维数相同的所有数组共享。原始Java类型(布尔型,字节型,字符型,短型,整型,长型,浮点型和双精度型)以及关键字void也都表示为对象。

  • Python 中,通过使用描述符,可以让程序员在引用一个对象属性时自定义要完成的工作。 本质上看,描述符就是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。 描述符是 Python 中复杂属性访问的基础,它在内部被用于实现 property、方法、类方法、静态方法和 super 类型。 描述符类基于以下 3 个特殊方法,换句话说,这 3 个方法组成

  • 当我试图编译新的模块化Java11应用程序时,我得到了这个错误消息:

  • 本文向大家介绍描述保理的类型。,包括了描述保理的类型。的使用技巧和注意事项,需要的朋友参考一下 分解的类型在下面解释- 追索保理-在这种情况下,客户必须从factor处回购未付的应收票据。 无追索权保理-在这种情况下,无法吸收未付发票的客户。 国内保理-当客户,客户和保理人在同一国家/地区时。 出口保理-它涉及四个方面,即出口商,出口因数,进口因数和进口商。也称为跨边界保理。 公开保理-如果商品或

  • 文档没写个代码真让小白抓狂啊

  • 本文向大家介绍Python中的类与对象之描述符详解,包括了Python中的类与对象之描述符详解的使用技巧和注意事项,需要的朋友参考一下 描述符(Descriptors)是Python语言中一个深奥但却重要的一部分。它们广泛应用于Python语言的内核,熟练掌握描述符将会为Python程序员的工具箱添加一个额外的技巧。为了给接下来对描述符的讨论做一些铺垫,我将描述一些程序员可能会在日常编程活动中遇到