反射和内置方法
反射
指的是在程序运行过程中可以"动态(不见棺材不掉泪)"获取对象的信息
class People:
def __init__(self,name,age):
self.name=name
self.age=age
def say(self):
print(f'{self.name}{self.age}')
obj=People('小白菜',18)
obj.say()
实现反射的机制步骤
1.先通过dir,查看出某一个对象下哪些属性
print(dir(obj))
2.可以通过字符串反射到真正的属性,得到属性值
print(obj.__dict__[dir(obj)[-2]])
四个函数的使用,通过字符串来操作属性值
# hasattr() print(hasattr(obj,'name')) 判断有无 obj.name熟悉,返回T,F # getattr() print(getattr(obj,'name')) 等同obj.name,有不存在该属性返回值为None # setattr() print(setattr(obj,'name','zc')) 等同 obj.name = zc # delattr() delattr(obj,'name') 等同于 del obj.name # 小白菜 # True # 小白菜 # None
class Ftp:
def put(self):
print('正在执行上传功能')
def get(self):
print('正在执行下载功能')
def interactive(self):
method=input(">>>: ").strip() # method='put'
if hasattr(self,method):
getattr(self,method)()
else:
print('输入的指令不存在')
# obj=Ftp()
# obj.interactive()
class Teacher:
dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
def show_student(self):
print('show_student')
def show_teacher(self):
print('show_teacher')
@classmethod
def func(cls):
print('hahaha')
alex = Teacher()
for k in Teacher.dic:
print(k)
key = input('输入需求 :')
# print(Teacher.dic[key])
if hasattr(alex,Teacher.dic[key]):
func = getattr(alex,Teacher.dic[key])
func()
内置方法
内置方法:就是在定义类内部,以__ 开头并以 __结束的方法,这个内置方法是为了定制化我们的类或对象,特点就是在某种情况下自动触发执行 str:在打印队形的时候会自动触发,然后将返回值(必须是字符串)当作本次打印的结果输出
class People:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return f'{self.name}:{self.age}'
obj = People('zxc同学', 18)
print(obj.__str__())
print(obj) # <'zxc同学':18>
del:在清理对象的时候触发,会先执行该方法
class People:
def __init__(self,name,age):
self.name=name
self.age=age
self.x=open('a.txt','w')
#self.x是占据的是操作系统的资源
def __del__(self):
self.x.close
obj = People('zxc同学', 18)
# del obj # obj.__del__()
print('============>')

浙公网安备 33010602011771号