Python入门学习
DAY27
今日内容: isinstance,issubclass,反射(hasattr,getattr,setattr,delattr),内置方法(__str__ , __del__ , __call__)
1. isinstance和issubclass
isinstance 判断对象是否是一种类型
列:
class Bar:
pass
class Foo(Bar):
pass
print(isinstance(obj,Foo)) #可以判断,对象是否是Foo类的实例化
print(isinstance([1,2,3],list)) #还可以判断是否是某种类型
issubclass 判断一个类是否是另一个类的子类
class Bar:
pass
class Foo(Bar):
pass
print(issubclass(Foo,Bar))
2. 反射(hasattr,getattr,setattr,delattr)
什么是反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射)
hasattr(object,name):判断object中有没有一个name字符串对应的方法或属性
print(hasattr(obj,'name')) # 等同于 'name' in obj.__dict__
getattr(object,name,default=None):获取对象中的字符串name属性
扫描二维码关注公众号,回复:
2928153 查看本文章
print(getattr(obj,'name')) # 等同于 obj.__dict__['name']
setattr(object,x, y):为对象设置属性
setattr(obj,'name','sql') #等同于 obj.__dict__['name']='sql'
setattr(obj,'xxx',1111) #等同于 obj.__dict__['xxx']=111
delatter(object,name):删除对象的name属性
delattr(obj,'name') # del obj.name
3.内置方法(__str__ , __del__ , __call__)
__str__:在对象被打印时自动触发,可以用来定义对象被打印时的输出信息
注意:必须返回一个字符串类型的值
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '<name:%s age:%s>'%(self.name,self.age)
obj1 = People('sql', 18)
print(obj1) #打印 <name:sql age:18>
__del__: 在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源
class Foo:
def __init__(self, x, filepath, encoding='utf-8'):
self.x = x
self.f = open(filepath, 'rt', encoding=encoding)
def __del__(self):
# 回收对象关联的其他资源
self.f.close()
obj = Foo(1, 'a.txt')
__call__:在对象被调用时会自动触发该方法
class Foo:
def __init__(self):
pass
def __call__(self, *args, **kwargs):
print('__call__')
obj = Foo() # 执行 __init__
obj() # 执行 __call__