Python 的内置函数 getattr() 是一个非常有用的反射工具,用于动态获取对象的属性或方法。它的基本语法如下:
getattr(object, name[, default])
参数说明:
object:要获取属性的对象name:字符串形式的属性名default:可选参数,当属性不存在时返回的默认值(如果不提供且属性不存在会抛出 AttributeError)
功能详解
-
基本属性获取:
class Person: def __init__(self, name): self.name = name p = Person("Alice") print(getattr(p, "name")) # 输出: Alice -
方法获取与调用:
class Calculator: def add(self, a, b): return a + b calc = Calculator() method = getattr(calc, "add") print(method(2, 3)) # 输出: 5 -
安全属性访问(使用默认值):
value = getattr(p, "age", 30) # 如果p没有age属性,返回30
实际应用场景
-
动态调用方法:
在插件系统或策略模式中,可以根据配置动态调用不同方法:methods = ["save_to_db", "save_to_file"] for method in methods: func = getattr(processor, method) func(data) -
处理未知属性:
在数据转换或API响应处理时,可以安全地获取可能不存在的字段:response = {"name": "Bob"} age = getattr(response, "age", "unknown") -
实现类似switch-case的功能:
def handle_case1(): pass def handle_case2(): pass case = "case1" handler = getattr(sys.modules[__name__], f"handle_{case}") handler()
注意事项
相关函数
setattr(object, name, value):设置属性值hasattr(object, name):检查属性是否存在delattr(object, name):删除属性
getattr() 的这种动态特性使得它在框架开发、元编程和灵活的代码结构中非常有用,但也要注意不要过度使用而影响代码的可读性。
随时随地看视频