一、isinstance和issubclass
Isinstance的用法是用来判断一个量是否是相应的类型,接受的参数一个是对象加一种类型。是用于判断一个对象是否是一个类的实例的函数。
例:
class Bar: pass class Bar(Foo): pass print(isinstance(obj,Foo)) # 可以判断对象是否为Foo类的实例化 print(isinstance([1,2,3],list)) # 还可以判断是否是某种类型
使用issubclass判断一个类是否是另外一个类的派生类,正确返回True错误返回False
例:
class Foo: pass class Bar(Foo): pass obj = Foo() print(issubclass(Foo,Bar)) # 判断是否子类
二、反射(hasattr、getattr、setattr、delattr)
反射:通过字符串的形式操作对象相关的属性,python中的一切事物都是对象,用字符串取代点(.)对属性的操作
hasattr(object,name): 判断object中有没有一个name字符串对应的方法或属性
print(hasattr(obj,'name')) # 等同于 'name' in obj.__dict__
setattr(object,x,y): 为对象一个属性
setattr(obj,'name','sql') # 等同于 obj.__dict__['name']='sql' setattr(obj,'xxx',123) # 等同于 obj.__dict__['xxx']=123
getattr(object,name,default): 获得对象name属性的值,不声明default时不存在该属性会报错
print(getattr(obj,'name')) # 等同于 obj.__dict__['name']
delattr(object,name): 删除对象的name属性
delattr(obj,'name') # del obj.name
三、内置方法
1、__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>
2、__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')
3、__call__: 对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2) 。模拟函数的对象可以用于创建防函数(functor) 或代理(proxy).
class Foo(object):
def __call__(self):
pass
f = Foo() # 类Foo可call
f() # 对象f可call