用到的
isinstance(对象,类) ------------------- 判断一个对象是否是一个类的实例
issubclass(子类,父类) ---------------- 判断一个类是否是一个类的子类
hasattr(对象,字符串属性) ------------ 判断一个属性在对象里有没有
getattr(对象,属性,第三参数) --------- 获取对象中的字符串属性
setattr(对象,属性,值) ------------------ 属性的赋值(设置值,修改值,新增值)
delattr(删除的属性) -------------------- 删除属性操作
__str__ ------------------------------------ 在对象被打印时自动触发,可以用来定义对象被打印时的输出信息(必须返回一个字符串类型的值)
__del__ ----------------------------------- 在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源
isinstance和issubclass例子
1 class Bar:
2 pass
3
4
5 class Foo(Bar):
6 pass
7
8
9 obj = Foo()
10 print(issubclass(Foo, Bar))
>>>True
11 print(isinstance(obj, Foo))
>>>True
反射例子
1 class Ftp:
2 def get(self):
3 print('get')
4
5 def put(self):
6 print('put')
7
8 def login(self):
9 print('login')
10
11 def run(self):
12 while True:
13 cmd = input('>>>: ').strip() # cmd='get'
14 if hasattr(self, cmd):
15 method = getattr(self, cmd)
16 method()
17 else:
18 print('输入的方法不存在')
19
20
21 obj = Ftp()
22 obj.run()
__str__例子
在对象被打印时自动触发,可以用来定义对象被打印时的输出信息(注意: 必须返回一个字符串类型的值)
1 class People:
2 def __init__(self, name, age):
3 self.name = name
4 self.age = age
5
6 def __str__(self):
7 return '<name:%s age:%s>' % (self.name, self.age)
8
9
10 obj = People('egon', 18)
11 print(obj) # print(obj.__str__())
>>><name:egon age:18>
__del__例子
在对象被删除时先自动触发该方法,可以用来回收对象以外其他相关资源,比如系统资源
1 class Foo:
2 def __init__(self, x, filepath, encoding='utf-8'):
3 self.x = x
4 self.f = open(filepath, 'rt', encoding=encoding)
5
6 def __del__(self):
7 print('run.....')
8 # 回收对象关联的其他资源
9 self.f.close()
10
11
12 obj = Foo(1, 'a.txt')
13 print('主===========>')
>>>主===========>
>>>run.....