zoukankan      html  css  js  c++  java
  • 反射和内置方法

    反射

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

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

      

     

  • 相关阅读:
    软件工程——团队作业个人总结
    软件工程——团队作业4
    软件工程——团队答辩
    JavaScript编码规范
    html编码规范
    软件工程——团队作业三
    软件工程——团队作业二
    ·软件工程——团队作业1
    软件工程第二次作业——心得体会(结对编程)
    软件工程第二次作业(结对编程)
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12708334.html
Copyright © 2011-2022 走看看