反射和内置方法
Posted tornadoes-destroy-parking-lots
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射和内置方法相关的知识,希望对你有一定的参考价值。
反射
指的是在程序运行过程中可以"动态(不见棺材不掉泪)"获取对象的信息
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(‘============>‘)
以上是关于反射和内置方法的主要内容,如果未能解决你的问题,请参考以下文章