在我们对描述符有了初步的了解之后,使用方法也是学习描述符阶段的必要路线。本文将讨论三种方法__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)。因为这里的描述符是 owner 所以如果你使用类属性,如果你使用它, self.xxx 如果你来存储属性值,这个属性也会被存储为类属性,也就是说,你所有的例子都会访问相同的描述符:
classDescriptor(object): def__init__(self): self.d_name='' def__get__(self,instance,owner): returnself.d_name def__set__(self,instance,name): self.d_name=name.title() def__delete__(self,instance): delself.d_name classPerson(object): name=Descriptor()
在这里,我们使用描述符的方法是保存字符串并大写首字母。实际描述符可以做得更多。操作如下:
>>>a=Person() >>>a.name='adam' >>>a.name 'Adam' >>>b=Person() >>>b.name 'Adam'
这就是问题所在。如果您想将描述符用作实例属性而不是类属性,请使用它 instance 参数代替 self 就好了。
以上是Python描述符中的三种方法。了解基本用途后,可以练习不同的方法,以便更好地熟悉这些描述符中的方法。