Python中的getattr()和setattr()函数详解
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中十分有用的内置函数。 通过使用这些函数,我们可以动态地添加或修改对象的属性,并在程序运行时得到我们想要的结果。
