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)  # 效果等同于上面

运行结果:

示例代码2:

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

运行结果:

示例代码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)

运行结果:

示例代码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)

运行结果:

  • 59
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Python 面向对象的编程,`getattr` 函数是一个内置函数,用于获取对象的属性值。通常情况下,我们可以通过 `.` 操作符来获取对象的属性值,例如 `obj.attr`。但是,有时候我们在编写代码时无法确定要获取的属性名,或者需要动态地获取属性值,这时候就可以使用 `getattr` 函数。 `getattr` 函数的语法如下: ```python getattr(object, name[, default]) ``` 其: - `object`:要获取属性的对象。 - `name`:要获取的属性名,可以是字符串或变量。 - `default`:可选参数,如果指定的属性不存在,返回默认值。 下面是一个简单的例子,演示了如何使用 `getattr` 函数获取对象的属性值: ```python class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("John", 30) name = getattr(p, "name") # 获取 p 对象的 name 属性值 age = getattr(p, "age") # 获取 p 对象的 age 属性值 gender = getattr(p, "gender", "Unknown") # 获取 p 对象的 gender 属性值,如果不存在,则返回默认值 "Unknown" print(name) # John print(age) # 30 print(gender) # Unknown ``` 在上面的例子,我们定义了一个 `Person` 类,并创建了一个 `p` 对象。然后,我们使用 `getattr` 函数获取了 `p` 对象的 `name` 和 `age` 属性值,以及 `gender` 属性值(由于 `p` 对象没有定义 `gender` 属性,因此返回默认值 "Unknown")。 总之,`getattr` 函数Python 一个非常有用的内置函数,可以帮助我们动态地获取对象的属性值,提高代码的灵活性和可维护性。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值