• isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)


    1.isinstance/type/issubclass

    1.type

    显示对象的类,但是不会显示他的父类

    2.isinstance

    会显示的对象的类,也会去找对象的父类,填写参数是对象,类isinstance(对象,类)如果对象属于后面的类会报Ture,反之False

    3.issubclass

    与isinstance 相似不过他填写的参数是类与类

    4.总结

    来说:type(对象)不会认为子类是一种父类类型;isinstance(对象,类)会认为子类是一种父类类型。

    2.反射(hasattr,getattr,setattr,delattr)

    • 反射就是通过字符串来操作类或者对象的属性

    • 反射本质就是在使用内置函数,其中反射有以下四个内置函数:

      1. hasattr:判断一个方法是否存在与这个类中
      2. getattr:根据字符串去获取obj对象里的对应的方法的内存地址,加"()"括号即可执行
      3. setattr:通过setattr将外部的一个函数绑定到实例中
      4. delattr:删除一个实例或者类中的方法
      

    1.hasattr

    用法: print(hasattr(对象,对象的方法或者特征),)后面内容必须为字符串的格式,如果有返回True,没有返回False

    2.getattr

    简单的用法:print(getattr(对象,对象的方法或者特征)),后面内容必须为字符串的格式,后面的内容必须对象有的,也返回其特征对应的内容

    详细的用法:

    getattr(实例化的类, '属性或者方法','没有找到属性或者方法返回的内容')

    • 如果没有填写没有找到属性或者方法的返回内容他会抛异常

    • 如果到了属性或者方法,其的返回值就是他的属性或者方法

      示例

    class A:
        def __init__(self):
            self.name = 'nick'
            # self.age='18'
        def method(self):
            print("method print")
            return 111
    a = A()
    print(getattr(a, 'name','not find'))  # 如果a 对象中有属性name则打印self.name的值,否则打印'not find'
    print(getattr(a, 'age','not find'))  # 如果a 对象中有属性age则打印self.age的值,否则打印'not find'
    print(getattr(a, 'method', 'default'))  # 如果有方法method,否则打印其地址,否则打印default
    print(getattr(a, 'method', 'default')())  # 如果有方法method,运行函数并打印接受他的返回值否则打印default
    

    3.seattr

    用法:setattr(YwY,',对象的方法或者特征,对应的值) , 如果没有该特征或者方法会新增,如果有则替换

    4.delattr

    用法:delattr(YwY,',对象的方法或者特征),删除对象拥有的方法或者特征

  • 相关阅读:
    MSSQl分布式查询
    欲善其事,必利其器 Librame Utility R1 实用工具包(.NET Framework 3.5)
    可复用的WPF或者Silverlight应用程序和组件设计(3)——控件级别
    Asp.Net 网站优化 数据库优化措施 使用主从库
    .NET独有的精巧泛型设计模式
    Javascript 使用 "大杂烩"
    淘宝下单高并发解决方案
    时间戳(timestamp)
    MSSQL锁机制
    maven开发过程实践
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11074457.html
Copyright © 2020-2023  润新知