一.isinstance与issubclass
isinstance:判断是否是一个实例
issubclass:判断是否是子类
d={'a':1}
print(isinstance(d,dict))
class A:
pass
class B(A):
pass
print(issubclass(B,A))
二.反射
反射就是通过字符串来操作类或者对象的属性
hasattr
getattr
setattr
delattr
class People:
country = 'China'
def __init__(self, name):
self.name = name
def eat(self):
print("%s is eating" % self.name)
return '你拿到我了'
peo1 = People('tom')
#操作函数属性
#1.判断有没有
print(hasattr(People,'eat'))
#2.查取出来
print(getattr(People,'eat')(peo1))
#3.增
def func():
return 'hello'
setattr(People,'speak',func())
print(People.__dict__)
#4.删除
print(People.__dict__)
delattr(People,'eat')
print(People.__dict__)
#操作数据属性
print(hasattr(peo1, 'name')) # peo1.name
print(hasattr(peo1, 'eat')) # peo1.eat
print(getattr(peo1,'xxx',None))#找不到属性就返回None
res=getattr(peo1,'name')
print(res)
setattr(peo1,'age',18)
print(peo1.age)
delattr(peo1,'name')
三.内置方法
__str__ :在对象被打印时自动触发,可以用来定义对象被打印时的输出信息,必须返回一个字符串的值.
应该在方法内采集对象的相关的信息,然后根据需要拼成字符串的格式返回
__del__(析构方法):在对象被删除之前自动触发,可以用来做回收系统资源相关的事情.
__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)
obj=People('tom',18)
print(obj)
__del__
class People:
def __init__(self, name, age):
self.name = name
self.age = age
self.f=open('a.txt','r',encoding='utf-8')
def __del__(self):
# print('run..........')
# 做回收系统资源相关的事情
self.f.close()
obj = People('tom', 18)
# print(obj)
# del obj
print('主')