# getattr、setattr、delattr
# getattr
getattr 是 Python 内置函数,用于获取对象的属性值。具体来说,它的作用是返回指定对象的指定属性值。如果指定的属性不存在,还可以提供一个默认值,避免出现异常。它的语法如下:
getattr(object, name[, default])
其中,object 是需要获取属性值的对象,name 是需要获取的属性名,default 是可选的默认值,如果属性不存在时,会返回这个默认值。
下面是一些常见的使用示例:
# 定义一个类
class MyClass:
foo = 42
# 获取对象的属性值
obj = MyClass()
print(getattr(obj, "foo")) # 42
# 获取不存在的属性,返回默认值
print(getattr(obj, "bar", "default")) # default
# 获取一个模块的属性值
import os
print(getattr(os, "path")) # <module 'posixpath' from '/usr/lib/python3.9/posixpath.py'>
在实际编程中,getattr 可以用于动态获取属性,可以在运行时根据需要获取某个对象的属性值,从而实现动态编程。
除了利用getattr动态获取熟悉外,还可以使用operator模块的methodcaller函数。
import math
import operator
class Point:
def __init__(self,x,y) -> None:
self.x = x
self.y = y
def __repr__(self) -> str:
return f"({self.x}, {self.y})"
def distance(self,x,y):
return math.hypot(self.x-x,self.y-y)
p = Point(2, 3)
d1 = getattr(p, 'distance')(0,0)
d2 = operator.methodcaller("distance", 0, 0)(p)
print(d1,d2) # 3.605551275463989 3.605551275463989
# hasattr、setattr、delattr
在 Python 中还有许多内置函数类似于 getattr(),用于获取对象的属性或方法,例如:
-
hasattr(obj, name):判断对象obj 是否存在名为name 的属性或方法。 -
setattr(obj, name, value):将对象obj 的属性或方法name 的值设置为value。 -
delattr(obj, name):删除对象obj 的名为name 的属性或方法。