zoukankan      html  css  js  c++  java
  • 类的内置方法__attr__介绍

    1、hasattr  getaddr  setaddr delattr 这四个函数同样也适用于类

    class BlackMedium:
        feture="Ugly"
        def __init__(self,name,addr):
            self.name=name
            self.addr=addr
        def sell_house(self):
            print("%s 正在卖房子,傻逼才买呢" %self.name)
        def rent_house(self):
            print("%s 正在租房子,傻逼才租呢" % self.name)
    print(hasattr(BlackMedium,"feture"))
    
    C:python35python3.exe D:/pyproject/day26/反射.py
    
    True

    2、双下划线开头的attr方法(__开头的都是内置的方法)

    __getattr__

    class Foo:
        x=1
        def __init__(self,y):
            self.y=y
        def __getattr__(self, item):
            print("执行__getattr__")
    f1=Foo(10)
    print(f1.y)
    f1.ssss#当实例调用的方法不存在时候才会执行__getattr
    
    C:python35python3.exe D:/pyproject/day26/双下划线开头的attr方法.py
    
    10
    
    执行__getattr__

    __delattr__

    class Foo:
        x=1
        def __init__(self,y):
            self.y=y
        def __delattr__(self, item):
            print("删除操作---->")
    f1=Foo(10)
    del f1.y#删除实例中的y 会触发__delattr__
    del f1.x #删除类中的x 会触发__delattr__
    
    C:python35python3.exe D:/pyproject/day26/双下划线开头的attr方法.py
    
    删除操作---->
    
    删除操作---->

    __setattr__只要设置一次值,就会触发一次它

    class Foo:
        x=1
        def __init__(self,y):
            self.y=y
        def __setattr__(self, key, value):
            print("__setattr__执行")
            self.__dict__[key]=value
    f1=Foo(10)
    print(f1.__dict__)
    f1.z=2
    print(f1.__dict__)
    
    C:python35python3.exe D:/pyproject/day26/双下划线开头的attr方法.py
    
    __setattr__执行
    
    {'y': 10}
    
    __setattr__执行
    
    {'y': 10, 'z': 2}

    3、如果调用的属性不存在,我们自己又没有定义__getattr的话,就会调用系统默认的

    class Foo:
        pass
    f1=Foo()
    print(f1.xxx)#只有在属性不存在的时候,会自动触发__getattr__
    
    AttributeError: 'Foo' object has no attribute 'xxx'

    我们自己定义一个__getattr__,就会用我们自己的定义的这个

    class Foo:
        def __getattr__(self, item):
            print("---->")
    f1=Foo()
    print(f1.xxx)#只有在属性不存在的时候,会自动触发__getattr__
    
    C:python35python3.exe D:/pyproject/day26/双下划线开头的attr方法.py
    
    ---->
    
    None

    注意:

    这__getattr__    __setattr__   __delattr__这三个只有实例化之后,实例调用的时候才会触发,跟类没有关系 

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9208573.html
Copyright © 2011-2022 走看看