美文网首页
Python 描述器

Python 描述器

作者: noteby | 来源:发表于2018-11-29 15:49 被阅读0次

描述器

定义了__get____set__方法的描述器称为数据描述器
只定义了__get__的描述器称为非数据描述器

二者区别:当属性名和描述器名相同时,在访问这个同名属性时,如果是数据描述器就会先访问描述器,如果是非数据描述器就会先访问属性。

如下:

class A:
    def __init__(self, a=1):
        self.a = a

    def __get__(self, instance, owner):
        print('get from A')
        return self.a

    def __set__(self, instance, value):
        print('set from A')
        self.a = value

    def __delete__(self, instance):
        print('del from A')


class B:
    """
    非资料描述器
    """

    def __init__(self, b=2):
        self.b = b

    def __get__(self, instance, owner):
        print('get from B')
        return self.b


class Test:
    a = A()
    b = B()

    def __init__(self, a, b):
        self.a = a
        self.b = b


print(Test.a)  # 1
print(Test.b)  # 2

t = Test(0, 9)

print(t.a)  # 0
print(t.b)  # 9

print(Test.a)  # 0
print(Test.b)  # 2

print(t.__dict__)  # {'b': 9}

del Test.a
print(Test.a)   # AttributeError: type object 'Test' has no attribute 'a'

相关文章

  • Python 描述器

    描述器 定义了__get__和__set__方法的描述器称为数据描述器只定义了__get__的描述器称为非数据描述...

  • python 描述器

    描述器定义 ① 实现描述符协议 实现 __get__(), __set__(), __delete__() 方法 ...

  • Python描述器

    引入描述器 以stackoverflow上关于描述器(descriptor )的疑问开篇。 以上代码实现了温度的摄...

  • Python 描述器解析

    语法简析 一般来说,描述器(descriptor)是一个有”绑定行为”的对象属性(object attribute...

  • python描述器(Descriptor)

    描述器协议 描述器协议包括以下3个方法: object.__get__(self, instance, owner...

  • Python 描述器学习

    想写一个关于密码检查的方法: 测试: 只包含数字,且长度小于8 包含数字和小写字母,长度大于8 包含大写小写字母及...

  • 9.描述器

    目录:1.描述器的表现2.描述器定义3.属性的访问顺序4.Python中的描述器5.新增方法 1. 描述器的表现 ...

  • Python 黑魔法 --- 描述器(descriptor)

    Python 黑魔法---描述器(descriptor) Python黑魔法,前面已经介绍了两个魔法,装饰器和迭代...

  • Python面向对象 - 描述器

    描述器 什么是描述器?描述器是干什么用的? 现在有一个Person类来表示人。其中有两个属性,体重weight和身...

  • Python描述器引导(翻译)

    1.1. 摘要 定义描述器, 总结描述器协议,并展示描述器是怎么被调用的。展示一个自定义的描述器和包括函数,属性(...

网友评论

      本文标题:Python 描述器

      本文链接:https://www.haomeiwen.com/subject/mcsfcqtx.html