开发者社区> 问答> 正文

hasattr() getattr() setattr() 函数使用详解?

hasattr() getattr() setattr() 函数使用详解?

展开
收起
珍宝珠 2019-11-11 11:46:04 2688 0
1 条回答
写回答
取消 提交回答
  • hasattr(object,name)函数:

    判断一个对象里面是否有name属性或者name方法,返回bool值,有name属性(方法)返回True,否则返回False。

    class function_demo(object):
        name = 'demo'
        def run(self):
            return "hello function"
    functiondemo = function_demo()
    res = hasattr(functiondemo, "name") # 判断对象是否有name属性,True
    res = hasattr(functiondemo, "run") # 判断对象是否有run方法,True
    res = hasattr(functiondemo, "age") # 判断对象是否有age属性,False
    print(res)
    

    getattr(object, name[,default])函数:

    获取对象object的属性或者方法,如果存在则打印出来,如果不存在,打印默认值,默认值可选。注意:如果返回的是对象的方法,则打印结果是:方法的内存地址,如果需要运行这个方法,可以在后面添加括号().

    functiondemo = function_demo()
    getattr(functiondemo, "name")# 获取name属性,存在就打印出来 --- demo
    getattr(functiondemo, "run") # 获取run 方法,存在打印出方法的内存地址
    getattr(functiondemo, "age") # 获取不存在的属性,报错
    getattr(functiondemo, "age", 18)# 获取不存在的属性,返回一个默认值
    

    setattr(object, name, values)函数:

    给对象的属性赋值,若属性不存在,先创建再赋值

    class function_demo(object):
        name = "demo"
        def run(self):
            return "hello function"
    functiondemo = function_demo()
    res = hasattr(functiondemo, "age") # 判断age属性是否存在,False
    print(res)
    setattr(functiondemo, "age", 18) # 对age属性进行赋值,无返回值
    res1 = hasattr(functiondemo, "age") # 再次判断属性是否存在,True
    

    综合使用

    class function_demo(object):
        name = "demo"
        def run(self):
            return "hello function"
    functiondemo = function_demo()
    res = hasattr(functiondemo, "addr") # 先判断是否存在
    if res:
        addr = getattr(functiondemo, "addr")
        print(addr)
    else:
        addr = getattr(functiondemo, "addr", setattr(functiondemo, "addr", "北京首都"))
        print(addr)
    
    2019-11-11 13:27:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载