欢迎访问宙启技术站
智能推送

Python中的getattr()和setattr()函数详解

发布时间:2023-05-21 22:35:44

Python中的getattr()和setattr()是内置函数,常被用来获取或设置对象的属性。这两个函数在Python中极其常用,下面我将深入介绍这两个函数的具体用途和应用场景。

1. getattr()函数

getattr()函数是Python内置函数之一,简要介绍一下其功能:当我们想要获取对象的属性时,可以使用getattr()函数。其函数原型为:

getattr(object, name[, default])

其中:

- object :目标对象,可以是类、模块、实例、属性等;

- name :属性名,可以是字符串、数字、变量等;

- default :默认返回值,如果指定的属性不存在,则返回默认值。

例如,有如下代码:

class Person:

    name = 'John'

    

p = Person()

print(getattr(p, 'name'))  # John

解释一下这段代码中的功能:我们定义了一个Person类,然后创建了一个p对象。通过getattr()函数,我们可以获取p对象的name属性值,即“John”。

当然,如果属性不存在,我们可以设置默认返回值。例如,下面的代码就会返回一个默认值:

class Person:

    name = 'John'

    

p = Person()

print(getattr(p, 'age', 18))  # 18

在这个例子中,我们将默认返回值设置为18。由于属性‘age’不存在,所以打印出来的是默认值18。

2. setattr()函数

setattr()函数与getattr()函数类似,只不过它用于设置对象的属性。例如,下面的代码演示了如何用setattr()函数设置对象的属性值:

class Person:

    name = 'John'

    

p = Person()

setattr(p, 'age', 18)

print(p.age)  # 18

这段代码中,我们使用setattr()函数向p对象中添加了一个新的属性age并将其值设置为18。 打印出来的结果就是18。

注意:setattr()函数的属性可以是字符串、数字、变量等。

除了以上的用法之外,setattr()函数还可以用来动态创建对象方法。例如,下面的代码动态创建了一个eat方法:

class Person:

    pass

    

p = Person()

setattr(p, 'eat', lambda self: print('I am eating!'))

p.eat()  # I am eating!

这段代码中,我们使用setattr()函数动态地创建了一个eat方法并将其添加到p对象中。最后,我们调用这个新方法并打印了出来。

结论:

总之,getattr()和setattr()都是Python中十分有用的内置函数。 通过使用这些函数,我们可以动态地添加或修改对象的属性,并在程序运行时得到我们想要的结果。