学习日记0823面向对象高级
一 isinstance方法
判断一个对象是否是一个类的对象
class Foo: pass f1 = Foo() isinstance(f1,Foo)
二 issubclass方法
判断两个类是否是继承关系
class Foo: pass class Woo(Foo): pass print(issubclass(Woo,Foo))
三 反射(通过字符串来反射/映射到类/对象的属性上)
hasatter(对象,'属性') 判断对象中是否存在属性name 本质原理:'name' in 对象.__dict__
getatter(对象,'属性',None) 得到一个对象中的属性 如果该属性不存在就返回None 本质原理:对象.__dict__['属性']
setatter(对象,'属性','值') 为对象添加一个属性 如果该属性存在就修改 本质原理:对象.__dict__['属性'] = '值'
delatter(对象,'属性') 删除对象的一个属性 本质原理:del 对象__dict__['属性']
四 内置方法
__str__ 在对象被打印是触发,可以用来定制对象被打印时的输出信息
注意:必须返回一个字符串类型的值
class Foo: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return '%s %s'%(self.name,self.age) f= Foo('egon',18) print(f)
__del__ 在对象被删除是自动触发,可以用来回收对象以外的其他相关资源,比如系统资源
# __del__: 在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源 class Foo: def __init__(self,x,filepath,encoding='utf-8'): self.x=x self.f=open(filepath,'rt',encoding=encoding) def __del__(self): print('run.....') # 回收对象关联的其他资源 self.f.close() obj=Foo(1,'a.txt')