• 技术文章 >Python技术 >Python基础教程

    Python描述符中有哪三种方法?

    小妮浅浅小妮浅浅2021-02-20 14:47:21原创2728

    我们在对描述符有了初步认识后,那么对于其中方法的使用,也是学习描述符阶段的必备路线。本篇所要讲述的是三种方法__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 来存储属性值的话,这个属性也会被存成类属性,即你所有的实例都将访问同一个描述符:

    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'

    这就是问题所在,如果想把描述符用作实例属性而不是类属性的话,使用 instance 参数代替 self 就好了。

    以上就是Python描述符中的三种方法,在了解基本的使用后,可以对不同的方法做一个练习,以便更好的熟悉这些描述符中的方法。

    专题推荐:python描述符
    品易云
    上一篇:Python中for循环进行字典迭代 下一篇:python中SQLAlchemy是什么?

    相关文章推荐

    • python中如何使用permutation()方法洗牌?• pyqt5在python中调出提示框• python中Beta分布如何理解?• python pyqt5系统中查找文件• python中卡方分布如何使用?• Python中for循环进行字典迭代

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网