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'}
优质内容筛选与推荐>>
1、[iphone-sqlite]Abort due to constraint violation 解决方法
2、动态sql语句输出参数
3、ADO.NET Entity Framework 学习高级篇2—改善EF代码的方法(下)
4、第二次作业
5、3ds max 2012-3ds max 动漫和游戏设置-设置骨骼动画


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn