zoukankan      html  css  js  c++  java
  • 反射,魔法方法

    魔法方法:

    isinstance / issubclass :
    # isinstance(o,c) -- 判断前者是否为后者所创建的对象
    print(isinstance(b,A))  # True
    print(isinstance(b,B))  # True
    
    # issubclass --判断前者是否为后者的子类
    print(issubclass(B,A))  # True
    
    

    反射 :

    指主要是指程序可以访问、检测和修改它本身状态或行为的一种能力;

    反射的优点:可实现一种可插拔机制,

    hasattr / setattr / getattr / delattr 函数 :
    # hasttr  - 查看该对象是否可以使用该属性或者方法
    print(hasattr(p, "name"))
    # getattr - 获取对象属性
    print(getattr(p, "character"))  # == p.character
    # 可以指定第三个参数,当属性不存在时返回该值,而不会报错
    # print(getattr(p,"balabala")) # 报错
    
    # setattr -修改对象属性
    setattr(Programmer, "character",
            "handsome")  # == Programmer.character = "handsome"
    
    # delattr - 删除该属性
    delattr(p, "name")  # == del p.name
    
    

    类的魔法方法:

    __doc__ : 查看类的描述性息  (类的注释)
    
    __module__ / __class__ :
        前者查看当前操作的类所在模块,后者查看当前对象的类是什么;
    
        
    __init__ : 构造方法  
    当通过类实例化成对象时,自动触发执行__init__方法。
    该方法下定义的属性即为实例属性,即会自动开辟一个内存空间,
    用来存放该实例对象的属性和类方法的指针。
    
    __del__ 方法  结束进程
    当由该类创建的实例对象,被删除或者说在内存中被释放时,将会自动触发执行
    一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。当然我上面重新了析构方法时,则无法真正内存回收,底层会有很多实现的功能被封装。
    
    __call__   对象后面加括号,触发执行。
    构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 call 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
    
    触发 : __new__ --> 生成一个空对象 
    	: __init__ --> 触发传入参数 --》obj
        :  返回初始化后的对象obj
    
    _dict__   类或者实例的属性字典  --》 类的内存空间
    类或这实例的属性字典,用来存放类或者实例的属性和方法
    
    该属性字典中以键值对的形式,存放类对象的属性和其对应的值 、方法和其对应的方法指针
    
    __str__方法
    # 如果一个类中定义了__str__方法,那么在打印对象 时,默认输出该方法的返回值。
    
    __getattr__、__setattr__、__delattr__ :
        调用 setattr / getattr / delattr时,便是执行了类中的魔法方法
    __setattr__添加/修改属性会触发它的执行
    
    #__delattr__删除属性的时候会触发
    
    #__getattr__只有在使用点调用属性且属性不存在的时候才会触发
    
    attr魔法方法是通过点" . “的方式调用触发,而后者item魔法方法是通过字典”[ ]"的方式调用触发;
    
    https://blog.csdn.net/Mrs_chens/article/details/102811955
    
  • 相关阅读:
    sql语句中的通配符
    Q&A 20090922
    Web大文件上传
    作别2010, 迎来2011的第一个工作日
    .Net 中 获取当前应用程序启动目录的几个方法
    asp.net身份验证和使用Silverlight的问题
    常用正则表达式
    最完美的xslt数值函数与字符串函数
    SQL2005的分页存储过程,支持多表多关联,亲测高效绝对可用
    处理大并发下的dropdownlist数据关联
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11803367.html
Copyright © 2011-2022 走看看