反射和内置方法

反射

指的是在程序运行过程中可以"动态(不见棺材不掉泪)"获取对象的信息

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('============>')

  

 

原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12708334.html