反射和内置方法
反射和内置方法
一 反射
1.1 什么是反射
指的是在程序运行过程中可以"动态(不见棺材不掉泪)"获取对象的信息
反射机制指的是在程序的运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性。
1.2 如何使用反射
实现反射机制的步骤
1.先通过多dir:查看出某一个对象下可以.出哪些属性来
class People:
def __init__(self,name,age):
self.name=name
self.age=age
def say(self):
print('<%s:%s>' %(self.name,self.age))
obj=People('辣白菜同学',18)
print(dir(obj))
#[...., 'age', 'name', 'say']
2.想办法通过字符串来操作对象的属性:这就涉及到内置函数hasattr、getattr、setattr、delattr的使用了(Python中一切皆对象,类和对象都可以被这四个函数操作,用法一样)
class Teacher:
def __init__(self,full_name):
self.full_name =full_name
t=Teacher('Egon Lin')
# hasattr(object,'name') 返回True和False
hasattr(t,'full_name')#判断有无属性t.full_name
# getattr(object, 'name', default=None)
getattr(t,'full_name',None) # 等同于t.full_name,不存在该属性则返回默认值None
# setattr(x, 'y', v)
setattr(t,'age',18) # 等同于t.age=18
# delattr(x, 'y')
delattr(t,'age') # 等同于del t.age
基于反射可以十分灵活地操作对象的属性,比如将用户交互的结果反射到具体的功能执行
class Ftp:
def get(self):
print('正在执行下载功能')
def put(self):
print('正在执行上传功能')
def interactive(self):
cmd = input('输入命令:').strip()
if hasattr(self,cmd):
getattr(self,cmd)()
else:
print('输入命令不存在')
obj = Ftp()
obj.interactive()
二 内置方法
2.1 什么是内置方法
定义在类内部,以__开头并以__结果的方法
特点:会在某种情况下自动触发执行
2.2 为什么要有内置方法
为了定制化我们的类or对象
2.3 如何使用内置方法
__str__方法会在对象被打印时自动触发,print功能打印的就是它的返回值,我们通常基于方法来定制对象的打印信息,该方法必须返回字符串类型
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "<%s:%s>" %(self.name,self.age)
obj = People('qqq',18)
print(obj)
__del__:在清理对象时触发,会先执行该方法
class People:
def __init__(self,name,age):
self.name = name
self.age = age
self.x = open('a.txt',mode='w')# self.x = 占据的是操作系统资源
def __del__(self):# 在对象obj被删除时,自动触发obj.__del__()
self.x.close()
obj = People('qqq',18)

浙公网安备 33010602011771号