python中getattr()函数用法详解

python中getattr()函数用法详解

getattr() 函数用于返回一个对象属性值。

def getattr(object, name, default=None): # known special case of getattr
    """
    getattr(object, name[, default]) -> value
    
    Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.
    When a default argument is given, it is returned when the attribute doesn't
    exist; without it, an exception is raised in that case.
    """
    pass

getattr()语法结构:

getattr(object, name[, default])
  • object -- 对象。
  • name -- 字符串,对象属性。
  • default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。

返回值:返回对象属性值。

示例代码1:

class Test(object):
    x = 1
 
 
a = Test()
print(getattr(a, 'x'))  # 获取属性 x 值
print(getattr(a, 'y', 'None'))  # 获取属性 y 值不存在,但设置了默认值
# print(getattr(a, 'y'))    # AttributeError: 'Test' object has no attribute 'y'
 
print(a.x)  # 效果等同于上面
class Demo(object):
    def __init__(self):
        self.name = '张三'
        self.age = '25'
 
    def first(self):
        print("这是 first 方法")
        return "one"
 
    def second(self):
        print("这是 second 方法")
 
 
a = Demo()
# 如果a对象中有属性name则打印self.name的值,否则打印'non-existent'
print(getattr(a, 'name', 'non-existent'))
print("*" * 100)
 
# 如果a对象中有属性age则打印self.age的值,否则打印'non-existent'
print(getattr(a, 'age', 'non-existent'))
print("*" * 100)
 
# 如果有方法first,打印其地址,否则打印default
print(getattr(a, 'first', 'default'))
print("*" * 100)
 
# 如果有方法first,运行函数并打印返回值,否则,打印default
print(getattr(a, 'first', 'default')())
print("*" * 100)
 
# 如果有方法second,运行函数并打印None否则打印default
print(getattr(a, 'second', 'default')())
alex
****************************************************************************************************
25
****************************************************************************************************
<bound method Demo.first of <__main__.Demo object at 0x0000020B33B75FD0>>
****************************************************************************************************
这是 first 方法
one
****************************************************************************************************
这是 second 方法
None
****************************************************************************************************

示例代码3: 【对对象中的方法传参使用】

class Demo(object):
    def run(self, name, age):
        return f"My name is {name}, age is {age}!"
 
 
aa = getattr(Demo, 'run')
print(aa)
 
bb = getattr(Demo(), 'run')
print(bb)
 
cc = getattr(Demo, 'run')(1, "dgw", "26")
print(cc)
 
dd = getattr(Demo(), 'run')("dgw", "26")
print(dd)
 
<function Demo.run at 0x000001DA602BBE50>
<bound method Demo.run of <__main__.Demo object at 0x000001DA717D4FD0>>
My name is alex,age is26
My name is alex,age is26

示例代码4: 【requests方法使用getattr()】

import requests
 
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}
 
# 最后有没有问号结果都一样
url = 'https://www.baidu.com/s?'
 
# 请求参数是一个字典 即wd=python
kw = {'wd': 'python'}
 
# 方法一:
# 带上请求参数发起请求,获取响应
response = requests.get(url, headers=headers, params=kw)
 
print(response.status_code)
print(response.url)
 
# 方法二:使用getattr()
response2 = getattr(requests, 'get')(url, headers=headers, params=kw)
print(response2.status_code)
print(response2.url)

posted @   布衣梦蝶1978  阅读(424)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示