• day23-1 isinstance、issubclass和反射


    isinstance和issubclass

    • isinstance(obj,cls)检查obj是否是cls的对象,它会检查父类
    class Foo:
        pass
    
    f = Foo()
    print(isinstance(f,Foo))  # f是Foo的实例化对象,所以打印True
    
    True
    
    class Foo(object):
        pass
    
    class Bar(Foo):
        pass
    
    print(isinstance(Bar(), Foo))  # 可以检查父类
    
    True
    
    • type()也可以用来获取实例化出对象的类,但它不能检测父类
    class Foo(object):
        pass
    
    class Bar(Foo):
        pass
    
    print(type(Foo()) == Foo)  # Foo()是Foo的实例化对象,type(Foo())就是Foo
    print(type(Bar()) == Foo)  # Bar()是Bar的实例化对象,type(Bar())是Bar,所以返回False
    
    True
    False
    
    • issubclass(sub,super)检查sub类是否是super的子类或派生类
    class Foo:
        pass
    
    class Bar(Foo):
        pass
    
    print(issubclass(Bar,Foo))  # Bar是Foo的子类,所以打印True
    
    True
    

    反射(hasattr,getattr,setattr,delattr)

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

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

    • hasattr: 通过字符串判断一个属性是否存在这个类或对象中
    • getattr:通过字符串获取类或对象中的某个属性
    • setattr:通过字符串修改类或对象的属性
    • delattr:通过字符串删除类或对象的属性
    class Foo:
        school = 'oldboy'
        
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    f = Foo('nick', '18')
    print(hasattr(f, 'name'))  # True
    print(hasattr(f, 'gender'))  # False
    
    print(getattr(f, 'name'))  # nick
    print(getattr(f, 'gender', None))  # 不存在该属性时返回第三个参数None,不写会报错
    
    setattr(f, 'gender', 'male')
    print(f.gender)  # male
    
    delattr(f, 'gender')
    print(f.__dict__)  # {'name': 'nick', 'age': '18'}
    
  • 相关阅读:
    Python KNN算法
    Python TF-IDF计算100份文档关键词权重
    Python 结巴分词
    Python 将pdf转换成txt(不处理图片)
    Python小爬虫-自动下载三亿文库文档
    Kubuntu麦克风音频无声音
    adb常用命令
    Ubuntu下adb的安装
    Wamp安装使用+Git for Windows
    TensorFlow使用记录 (九): 模型保存与恢复
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11066931.html
Copyright © 2020-2023  润新知