• 反射getattr hasattr


    #反射 : 是用字符串类型的名字 去操作 变量
    # 反射对象中的属性和方法   # hasattr getattr setattr delattr
    class Tech(): dic = {"学生信息":'show_student',"老师信息":'show_teacher'} def show_teacher(self): print("显示老师") def show_student(self): print("显示学生") @classmethod def func(self): print("OKKKK") print(Tech.dic) #{'学生信息': 'show_student', '老师信息': 'show_teacher'} print("======") jack = Tech() print(jack.dic) #{'学生信息': 'show_student', '老师信息': 'show_teacher'} for k in jack.dic: print(k) print("++++++") ''' getattr()获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。 需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法, 可以在后面添加一对括号。 ''' # getattr() 函数用于返回一个对象属性值 ret1 = getattr(Tech,"dic") #得到的类.属性名 类也是一个对象 #获取dic属性,存在就打印出来。 print(ret1) #{'学生信息': 'show_student', '老师信息': 'show_teacher'} ret2 = getattr(Tech,"func") #得到的类.方法名, #获取func方法,存在就打印出方法的内存地址 print(ret2) #<bound method Tech.func of <class '__main__.Tech'>> print("--------------------") #getattr(Tech,"func")() #获取func方法,后面加括号可以将这个方法运行。 ret2() #OKKKK #获取func方法,后面加括号可以将这个方法运行。 ret3 = getattr(jack,"show_teacher") #对象,方法名 ret3() #显示老师 ret4 = getattr("aaa", "age","18") #若属性不存在,返回一个默认值。 print(ret4) #18 if getattr(Tech,"dic"): print(getattr(Tech,"dic")) key = input("输入key的名称:") print(Tech.dic[key])
    #检测是否有某属性或方法
    if hasattr(jack,Tech.dic[key]): func = getattr(jack,Tech.dic[key]) #得到字典value的值, func() #获取func方法,后面加括号可以将这个方法运行。 # hasattr(object, name) # 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False。 # 需要注意的是name要用括号括起来 ret5 = hasattr(jack, "name") #判断对象有name属性 print(ret5) #False ret5 = hasattr(jack, "func") #判断对象有func属性 print(ret5) #True

    #设置属性
    setattr(obj,'sb',True)
    setattr(obj,'show_name',lambda self:self.name+'sb')
    print(obj.__dict__)
    print(obj.show_name(obj))
    
    #删除属性
    delattr(obj,'age')
    delattr(obj,'show_name')
    delattr(obj,'show_name111')#不存在,则报错
    
    print(obj.__dict__)
     
  • 相关阅读:
    spring管理hibernate,mybatis,一级缓存失效原因
    The constructor ClassPathXmlApplicationContext(String) refers to the missing type BeansException
    idea中Hibernate错误:无法解析表
    使用Dom4解析xml
    关于idea中新建web项目 webapp文件夹没有小蓝点 ,启动服务,访问不到解决方案
    解决VS编译太慢问题
    Entity FrameWork6 Code First带virtual关键字外键 Asp.Net WebApi无法返回实体类数据问题
    webapi请求返回{"$id":"1","Message":"请求的资源不支持 http 方法“GET”。"}
    WPF的BusyIndicator控件只显示遮罩层,不显示提示层问题
    [转]Mysql将数据分组后取出时间最近的数据
  • 原文地址:https://www.cnblogs.com/chvv/p/10100975.html
Copyright © 2020-2023  润新知