• python __XX__ 一篮子 反射 魔法方法


    映射(对象的内置方法):反射指的是通过 “字符串” 对 对象的属性进行操作。   

    注意 :这里是通过‘字符串’的方式去找对象的属性方法,通过对象.属性  也可以 获取属性或方法,

                但是为了方便  我们python提供了通过字符串的方式去操作 

        - hasattr: 通过 “字符串” 判断对象的属性或方法是否存在。    
    
        - getattr: 通过 “字符串” 获取对象的属性或方法。
    
        - setattr: 通过 “字符串” 设置对象的属性或方法。
    
        - delattr: 通过 “字符串” 删除对象的属性或方法。
    

    先创建一个对象

      有: hasattr(obj,"字符串")

     

       获取:getattr(obj,"字符串") 获取对象的属性值 或者 方法名(获取方法返回值是方法名)若要执行就要加()

     

      

    设置:setattr(obj,"字符串",value)     给属性设置一个值,有则覆盖,无则新增

     删除:deladdr(obj,"字符串")  删除方法名会报错    只有getattr 可以获取函数名

    魔法方法(类的内置方法):    注意是在类内部定义  旨在控制过程(拦截方法)

    定义:凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法

    __init__:     在调用类通过 类() 产生对象时触发

    扩展:函数的名称空间在调用时产生,类的名称空间在定义时产生(联想到元类 和  object类)

    __new__ :    在__new__之前自动触发,__new__  方法直接调用 返回object.__new__ 产生一个对象(看源码)   

     为什么类中可以不定义__init__方法  就可以产生对象   元类 type  call  new     orm复习  截图

    __init__ 在对象需要传参时使用,没有参数时,可以不用, 

     即在类加() 括号时,触发type元类的__call__ 方法 ==> __new__方法  产生对象   

    '''
    创建类实例过程:
    1、先通过类的原类的__new__方法来创建类对象
    2、在通过类的原类的__init__方法来实现对类对象的属性以及方法的赋值
    3、通过调用类的原类的__call__方法来实现对类对象的__new__方法以及__init__方法的调度
    4、调用类对象的__new__方法实现类的实例
    5、调用类对象的__init__方法实现类实例的属性以及方法的赋值
    '''
    

     

    注意:  __get....__方法 自带参数(self,item)对象.item会自动把参数传给 get方法   

                __set..__方法自带参数(self,key,value)     对象.key = value  会自动把参数传给set 方法

    __getattr__:  在通过 “对象.属性”  属性没有时触发     

    语法: def  __setaddr__(self):

     __getattribute__:    在 “对象.属性” 获取属性时,无论 "属性有没有" 都会触发。  

     __setattr__:    当 “对象.属性 = 属性值” , 添加或修改属性时触发

     __call__:  对象+() 时,触发    类+()发生了什么事: type类 的__call__==>__new__

    __str__: 在打印对象时触发   必须要一个字符串的返回值

    __getitem__ :    在对象通过 “对象[key]” 获取属性时触发。

    __setitem__:    在对象通过 “对象[key]=value值” 设置属性时触发。

      

  • 相关阅读:
    HANA 去掉前导 0
    HANA 平方根,N次方根
    C++ map: stl source code.
    pip.conf
    在线文本比较
    IIS配置.net5站点
    Java基础知识01
    面试题2022年4月份
    关闭 Ubuntu 20 桌面版动画,使应用程序菜单不再卡顿
    c# swagger
  • 原文地址:https://www.cnblogs.com/bigbox/p/12163280.html
Copyright © 2020-2023  润新知