Python内置函数getattr的使用场景

一、getattr函数的作用是什么?

在Python交互式的help环境下,输入getattr,回车,会得到下面的信息:

阅读上图的信息,我们对getattr函数可以有如下认识:

  • 它接受两个位置参数——object和name,还接受一个可选参数——default
  • 参数object是一个对象
  • 参数name的类型是字符串,它是对象object的属性名字
  • 如果我们有一个对象叫alex,他有一个属性是age,那么getattr(alex,'age')得到的结果和alex.age是一样的
  • 如果我们不确定对象alex是否有一个weight属性,我们依然可以使用getattr(alex,'weight',0)来尝试获取。如果不存这个属性,就会返回0,因为我们设置了default参数的值为0,这个0就是在属性不存在时返回的默认值。

二、什么时候需要使用getattr呢?

 既然getattr(alex,'age') 和 alex.age都能获取alex对象的age属性的值,那我们使用后者不就行了吗?毕竟点语法看起来比getattr函数简单多了,不用写那么多字。确实,一般情况下,使用点语法来获取属性值非常方便。但是也存在一些场景,点语法无能为力,只好使用getattr函数来获取属性值。

究竟应该使用谁,关键就在于,编写代码的时候程序员是否能够确定要获取哪个属性的值。

如果我明确地知道,我就是想要获取age这个属性的值,那么alex.age就满足了我的需求。但是,试想如下的场景:

alex对象有name,age,job,weight,height五个属性,我们要根据用户的选择来展示相应的属性。也就是说,用户告诉程序“给我看看alex的身高吧!”,程序就要把height属性的值展示给用户看。

上面这个场景中,程序员写代码的时候无法确定要访问哪个属性值,选择权是交给用户的。而用户的输入是一个字符串"height",字符串在alex.height这样的点语法里并没有容身之处。怎么样?这个需求用点语法不太合适了吧?(如果非要用点语法,也不是不可以。比如,用一个字典把alex所有的属性值都存起来。键就是“height”这样的字符串,值就是alex.height这样的属性值。那么,就可以用“height"这样的字符串把对应的属性值取出来了。不过这个方法没有接下来要说到的getattr好。)这时候,用getattr就非常合适了。因为,getattr的第二个参数类型正是字符串!我们可以用getattr(alex,"height")来取出身高的值。我们甚至还可以使用default参数很好地解决用户输入的属性不存在的问题。

示例代码如下:

from typing import NamedTuple

class Person(NamedTuple):
    '''人类'''
    name: str
    age: int
    job: str
    weight: float
    height: float

alex = Person('Alex', 32, 'actor', 60, 178)

# 把用户输入的字符串赋值给变量attribute_name
attribute_name = input('''What do you want to know about Alex? 
Enter an attribute name>>>''')
# 注意,上述字符串被传进了这个函数作为第二个参数
# 第三个参数是属性不存在时返回的字符串
print(getattr(alex,attribute_name, 'Sorry, this attribute does not exist.'))

以上就是getattr函数非常常用的一个使用场景,也是我在观察其他优秀代码时总结出的经验。如果你还知道其他适合这个函数的场景,欢迎在评论区留言讨论。

 

 

 

如果这篇博文帮到了你,就请给我点个吧(#^.^#)

有疑问也欢迎留言~博主可nice啦,在线秒回ヾ(◍°∇°◍)ノ゙

### 回答1: 在 Python 中,getattr() 是一个内置函数,用于获取对象属性或方法。它的语法如下: ``` getattr(object, name[, default]) ``` 其中: - object:表示要获取属性或方法的对象。 - name:表示要获取的属性或方法名。 - default:可选参数,表示如果没有找到指定的属性或方法,返回的默认值。 如果指定的属性或方法不存在,且没有提供默认值,则会抛出 AttributeError 异常。如果指定的属性或方法存在,则返回对应的值或函数对象。可以使用 getattr() 来动态地获取对象属性或方法,这在编写一些通用的代码时非常有用。 ### 回答2: Python中的`getattr`函数是一个内置函数,用于获取一个对象属性值。 `getattr`函数接受两个参数,第一个参数是对象,第二个参数是属性名。它的作用是返回对象属性值,如果属性不存在,则返回默认值(可选参数)或者抛出`AttributeError`异常。 下面是`getattr`函数的示例用法: ```python class Person: def __init__(self, name, age): self.name = name self.age = age person = Person('Alice', 25) # 获取对象属性值 name = getattr(person, 'name') print(name) # 输出:Alice # 当属性不存在时,返回默认值 gender = getattr(person, 'gender', 'Unknown') print(gender) # 输出:Unknown # 当属性不存在时,抛出AttributeError异常 address = getattr(person, 'address') # 输出:AttributeError: 'Person' object has no attribute 'address' ``` 在上面的示例中,我们首先创建了一个`Person`类的实例`person`。然后,我们使用`getattr`函数来获取`person`对象的`name`属性的值,结果为`'Alice'`。接下来,我们使用`getattr`函数来获取`person`对象的`gender`属性的值,由于`gender`属性并不存在,所以返回了默认值`'Unknown'`。最后,我们使用`getattr`函数来获取`person`对象的`address`属性的值,在这种情况下,由于`address`属性也并不存在,所以抛出了`AttributeError`异常。 总之,`getattr`函数是一个非常实用的函数,可以方便地获取对象属性值,并处理属性不存在的情况。 ### 回答3: Python中的getattr()函数是一个内置函数,用于获取一个对象属性值。getattr()函数有三个参数:obj(表示要获取属性对象)、name(表示要获取的属性名)、default(可选参数,表示如果属性不存在时返回的默认值)。 当我们需要获取一个对象属性值时,可以使用getattr()函数。如果该对象有该属性,则返回属性的值;如果没有该属性,则可以根据传入的default参数返回默认值,如果没有传入default参数,则会抛出AttributeError异常。 使用getattr()的一个常见场景是在动态地读取对象属性时,可以通过传入一个变量作为属性名来获取属性值。 例如,假设有一个类Person,有属性name和age。我们可以根据用户输入的属性名,动态地获取该属性的值: ```python class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("张三", 20) attr_name = input("请输入要获取的属性名:") attr_value = getattr(p, attr_name, "属性不存在") print(attr_value) ``` 在上面的代码中,我们通过input()函数获取了用户输入的属性名,然后使用getattr()函数获取对应属性的值,并将其赋给attr_value变量。如果用户输入的属性名不存在,我们传入了一个默认值"属性不存在",表示属性不存在时返回该默认值。 总之,getattr()函数是一个非常有用的函数,可以帮助我们动态地获取对象属性值,使代码更加灵活和可扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值