美文网首页
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 描述器

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