zoukankan      html  css  js  c++  java
  • 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,',对象的方法或者特征),删除对象拥有的方法或者特征

  • 相关阅读:
    蛙蛙请教:问几个面向对象设计的问题
    推荐一些flash和asp.net结合开发的文章
    写一个跟踪的类库
    蛙蛙推荐:有关随机数的一些讨论
    蛙蛙推荐:用ASP.NET WEB Services和Flash MX 2004打造MP3播放器
    HiveQL学习
    Linux rpm 命令参数使用详解[介绍和应用]
    java.util.concurrent.locks.Condition 例子程序探讨
    [转]sudoers设置
    配置linux电脑
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11074457.html
Copyright © 2011-2022 走看看