zoukankan      html  css  js  c++  java
  • 2019年9月8日 描述符,代理,优先级VIP

    class Foo:
        def __set__(self, instance, value):#由于Foo代理x,所以触发了set方法
            print('set方法',instance,value)#instance传递的就是 b1
            instance.__dict__['x']=value#底层实现赋值,如果没有这句,那么b1.__dict__ 打印出来就是空。
    
    class Bar:
        x=Foo()#Foo() 代理了x
        def __init__(self,n):
            self.x=n
    
    b1=Bar(10)
    b1.x=22
    print(b1.x)
    print(b1.__dict__)

    》》》

    set方法 <__main__.Bar object at 0x02D90A30> 10
    set方法 <__main__.Bar object at 0x02D90A30> 22
    22
    {'x': 22}

    描述符注意事项

    class Foo:
        def __set__(self, instance, value):
            print('set方法')
    
        def __get__(self, instance, owner):
            print('get方法')
    
        def __delete__(self, instance):
            print('delete方法')
    
    
    class Bar:
        x=Foo()#描述符
    
    # print(Bar.__dict__)
    # Bar.x=1  #赋值时定义类属性
    # print(Bar.__dict__)
    # print(Bar.x)
    
    b1=Bar()
    print(b1.__dict__) #对应的属性字典为空
    b1.x=2# 先找属性字典,没找到后再找数据描述符,最后是实例属性

    >>>>

    {}
    set方法

    __get__,__set__,__delete__描述就是一个新式类,这个类必须至少实现上面的三个中的一个。

    别人的类中去定义的。

    class 类:

      name=描述符()

    obj=类()

    obj.name #触发__get__

    obj.name='xxxx' #触发__set__

    del obj.name #触发__delete__

  • 相关阅读:
    使用AsyncTask简单的文件遍历
    如何创建黑名单
    关于PopupMenu的用法
    联系人的搜索和添加
    php获取真实IP地址
    socket.io获取客户端的IP地址(修正官方1.0.4版本BUG)
    ubuntu下安装bind9
    install source nginx 1.6.0
    在Ubuntu下的samba实现
    买了新硬盘,给ESXI的虚拟机挂进真实硬盘。
  • 原文地址:https://www.cnblogs.com/python1988/p/11488464.html
Copyright © 2011-2022 走看看