在我们对描述符有了初步的了解之后,使用方法也是学习描述符阶段的必经之路。本文将介绍 __get__()、__set__() 和 __delete__() 三种方法。为了和我们学过的函数区分开来,下划线表示是一种特殊的方法。下面我们带来Python描述符中的三个方法的详细解释。
1、方法说明
通常,描述符是具有“绑定行为”的对象属性,其属性访问已被描述符协议中的方法覆盖。这些方法是 __get__()、__set__() 和 __delete__()。
instance的参数代表实例化的对象,owner代表实例所属的类。
描述符必须在类属性中定义,而不是在构造函数中。
2、实例
object.__get__(self,instance,owner)
object.__set__(self,instance,value)
object.__delete__(self,instance)
上述参数中,self 指的是描述符本身,owner 指的是包含描述符作为属性的对象,instance 指的是owner 的实例。这些参数由解释器自动传递,否则传递 None。函数体是用户自定义的,三个参数(self、instance、owner)在这里可以正常使用。由于这里的描述符是所有者的类属性,如果你使用 self.xxx 来存储属性值,这个属性也会被存储为一个类属性,即你所有的实例都会访问同一个描述符:
class Descriptor(object):
def __init__(self):
self.d_name = ''
def __get__(self, instance, owner):
return self.d_name
def __set__(self, instance, name):
self.d_name = name.title()
def __delete__(self, instance):
del self.d_name
class Person(object):
name = Descriptor()
我们这里使用描述符的方式是保存一个字符串并且首字母大写,实际的描述符可以做更多的事情。运行如下:
>>> a = Person()
>>> a.name = 'adam'
>>> a.name
'Adam'
>>> b = Person()
>>> b.name
'Adam'
这就是问题所在,如果要将描述符用作实例属性而不是类属性,只需使用实例参数而不是 self 。
以上是 Python 描述符中的三个方法。在了解了基本用法之后,你可以对不同的方法进行练习,以更好地熟悉这些描述符中的方法。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python打开文件的方法有哪些08/21
- ♥ python需要linux吗?11/15
- ♥ python写入csv而不覆盖原始数据09/23
- ♥ 如何在python中保留两位小数08/25
- ♥ 如何在python中找到平均值08/16
- ♥ python用户输入法09/28
内容反馈