Python中的描述符主要有三种类型:数据描述符、非数据描述符和带属性的描述符。
__set__()方法但没有定义__get__()方法,那么它就是一个数据描述符。数据描述符的主要作用是控制属性的赋值操作。__get__()方法但没有定义__set__()方法,那么它就是一个非数据描述符。非数据描述符的主要作用是控制属性的获取操作。__set__()、__get__()和__delete__()方法,那么它就是一个带属性的描述符。带属性的描述符可以同时控制属性的赋值、获取和删除操作。需要注意的是,描述符必须是一个具有特殊方法的类,即必须至少实现__get__()、__set__()或__delete__()中的一个方法。此外,描述符还可以继承自Python内置的property()函数,该函数本身就是一个带属性的描述符。