Python中如何使用描述器进行属性封装?

2026-06-11 10:140阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2292个文字,预计阅读时间需要10分钟。

Python中如何使用描述器进行属性封装?

语法简介+一般来说,描述器(descriptor)是一个有绑定行为的对象属性(object attribute),其属性访问被描述器协议方法重写。这些方法包括+__get__()、+__set__()和+__delete__()+。如果一个+__get__()+

语法简析

一般来说,描述器(descriptor)是一个有”绑定行为”的对象属性(object attribute),它的属性访问被描述器协议方法重写。这些方法是 __get__()__set__()__delete__() 。如果一个对象定义了以上任意一个方法,它就是一个描述器。而描述器协议的具体形式如下:

descr.__get__(self, obj, type=None) --> value descr.__set__(self, obj, value) --> None descr.__delete__(self, obj) --> None

描述器本质上是一个类对象,该对象定义了描述器协议三种方法中至少一种。而这三种方法只有当类的实例出现在一个所有者类(owner class)之内时才有效,也就是说,描述器必须出现在所有者类或其父类的字典 __dict__ 里。这里提到了两个类,一是定义了描述器协议的描述器类,另一个是使用描述器的所有者类。

描述器往往以装饰器的方式被使用,导致二者常被混淆。描述器类和不带参数的装饰器类一样,都传入函数对象作为参数,并返回一个类实例,所不同的是,装饰器类返回 callable 的实例,描述器则返回描述器实例。

记住上面的话,下面我们举例说明。

阅读全文

本文共计2292个文字,预计阅读时间需要10分钟。

Python中如何使用描述器进行属性封装?

语法简介+一般来说,描述器(descriptor)是一个有绑定行为的对象属性(object attribute),其属性访问被描述器协议方法重写。这些方法包括+__get__()、+__set__()和+__delete__()+。如果一个+__get__()+

语法简析

一般来说,描述器(descriptor)是一个有”绑定行为”的对象属性(object attribute),它的属性访问被描述器协议方法重写。这些方法是 __get__()__set__()__delete__() 。如果一个对象定义了以上任意一个方法,它就是一个描述器。而描述器协议的具体形式如下:

descr.__get__(self, obj, type=None) --> value descr.__set__(self, obj, value) --> None descr.__delete__(self, obj) --> None

描述器本质上是一个类对象,该对象定义了描述器协议三种方法中至少一种。而这三种方法只有当类的实例出现在一个所有者类(owner class)之内时才有效,也就是说,描述器必须出现在所有者类或其父类的字典 __dict__ 里。这里提到了两个类,一是定义了描述器协议的描述器类,另一个是使用描述器的所有者类。

描述器往往以装饰器的方式被使用,导致二者常被混淆。描述器类和不带参数的装饰器类一样,都传入函数对象作为参数,并返回一个类实例,所不同的是,装饰器类返回 callable 的实例,描述器则返回描述器实例。

记住上面的话,下面我们举例说明。

阅读全文