返回介绍

特性和描述符是如何相关的

发布于 2024-01-29 22:24:14 字数 794 浏览 0 评论 0 收藏 0

正如前面提到的,特性和描述符有很强的相关性——property内置函数只是创建描述符的一种方便方式。既然已经知道了二者是如何工作的,我们应该能够看到,可以使用如下的一个描述符类来模拟property内置函数:

这个Property类捕获了带有描述符协议的属性访问,并且把请求定位到创建类的时候在描述符状态中传入和保存的函数或方法。例如,属性获取从Person类指向Property类的__get__方法,再回到Person类的getName。有了描述符,这“恰好可以工作”。

注意,尽管这个描述符类等同于只是处理基本的特性用法,使用@decorator语法也只是指定了设置和删除操作,但是我们的Property类也必须用setter和deleter方法扩展,这可能会节省装饰的访问器函数并且返回特性对象(self应该足够了)。既然property内置函数已经做了这些,这里,我们将省略这一扩展的正式编码。

还要注意,描述符用来实现Python的__slots__,使用存储在类级别的描述符来截取slot名称,从而避免了实例属性字典。参见第31章了解关于slot的更多介绍。

注意:在第38章中,我们还将使用描述符来实现应用于函数和方法的函数装饰器。正如你将在那里见到的,由于描述符接收描述符和主体类实例,它们在这种情况下工作得很好,尽管嵌套函数通常是一种更简单的解决方案。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文