Python 反射-isinstance

  • 2020 年 1 月 19 日
  • 筆記

用到的

isinstance(对象,类)  ——————-  判断一个对象是否是一个类的实例

issubclass(子类,父类)  —————-  判断一个类是否是一个类的子类

hasattr(对象,字符串属性)  ————  判断一个属性在对象里有没有

getattr(对象,属性,第三参数)  ———  获取对象中的字符串属性  

setattr(对象,属性,值)  ——————  属性的赋值(设置值,修改值,新增值)

delattr(删除的属性)  ——————–  删除属性操作

__str__  ————————————  在对象被打印时自动触发,可以用来定义对象被打印时的输出信息(必须返回一个字符串类型的值)

__del__  ———————————–  在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源

isinstance和issubclass例子

 1 class Bar:   2     pass   3   4   5 class Foo(Bar):   6     pass   7   8   9 obj = Foo()  10 print(issubclass(Foo, Bar))  >>>True  11 print(isinstance(obj, Foo))  >>>True

反射例子

 1 class Ftp:   2     def get(self):   3         print('get')   4   5     def put(self):   6         print('put')   7   8     def login(self):   9         print('login')  10  11     def run(self):  12         while True:  13             cmd = input('>>>: ').strip()  # cmd='get'  14             if hasattr(self, cmd):  15                 method = getattr(self, cmd)  16                 method()  17             else:  18                 print('输入的方法不存在')  19  20  21 obj = Ftp()  22 obj.run()

__str__例子

在对象被打印时自动触发,可以用来定义对象被打印时的输出信息(注意: 必须返回一个字符串类型的值)

 1 class People:   2     def __init__(self, name, age):   3         self.name = name   4         self.age = age   5   6     def __str__(self):   7         return '<name:%s age:%s>' % (self.name, self.age)   8   9  10 obj = People('egon', 18)  11 print(obj)  # print(obj.__str__())  >>><name:egon age:18>

__del__例子

在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源

 1 class Foo:   2     def __init__(self, x, filepath, encoding='utf-8'):   3         self.x = x   4         self.f = open(filepath, 'rt', encoding=encoding)   5   6     def __del__(self):   7         print('run.....')   8         # 回收对象关联的其他资源   9         self.f.close()  10  11  12 obj = Foo(1, 'a.txt')  13 print('主===========>')  >>>主===========>  >>>run.....