1.isinstance(obj,cls)和issubclass(sub,super)
判断obj是否是cls类的对象
例:
li=[1,[2,[3,[4]]]]
def run_list(li):
for i in li:
if isinstance(i,list):
run_list(i)
else:
print(i)
run_list(li)
判断sub是否是super的派生类
2. 反射
通过字符串的形式操作对象的相关属性
(1)hasattr
print(hasattr(peo1,'name')) #判断name是否在peo1.name中是可以访问的属性
(2)getarrt
print(getattr(peo1,'xx','None'))#在peo1中没有xx这个属性,有的话返回对应的值;没有这个属性,返回None,不会报错
(3)strattr
setattr(peo1,'age',19) #增加属性
# print(peo1 .__dict__ )
(4)delattr(peo1,'name') #删除
__str__ 在打印对象时触发
__del__析构方法
__getattr__ 对象在调用属性和方法时,找不到,就会触发;
__setattr__ 对象再给属性赋值时,就会触发
class A():
bb='123'
def __getattr__(self, item):
print(item) #byuu
return 'aa'
def __setattr__(self, key,value):
print(key,value) # 新的属性名和值 bb 199
a = A()
print(a.byuu) #调用的属性不存在就触发__getattr__
# a.bb = 199 # 属性赋值时触发__setattr__