• 反射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__)
     
  • 相关阅读:
    java使用http获取 GET请求接口数据代码
    sql语句和造数据脚本
    .NET创建委托可大幅度提高反射调用的性能
    typescript 单例模式
    文字全方位描边效果
    【动植物研究动态】20220605文献解读
    vue.use干了什么,在什么时候用 mn
    error: expected ‘)’ before ‘PRIx64’
    sqlserver获取所有表的字段说明
    PCB+SMT线上报价系统,数字化建设如何获取现金流?
  • 原文地址:https://www.cnblogs.com/chvv/p/10100975.html
Copyright © 2020-2023  润新知