继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python 的内置函数 getattr

2882716
关注TA
已关注
手记 29
粉丝 0
获赞 0

Python 的内置函数 getattr() 是一个非常有用的反射工具,用于动态获取对象的属性或方法。它的基本语法如下:

getattr(object, name[, default])

参数说明:

  • object:要获取属性的对象
  • name:字符串形式的属性名
  • default:可选参数,当属性不存在时返回的默认值(如果不提供且属性不存在会抛出 AttributeError)

功能详解

  1. 基本属性获取

    class Person:
        def __init__(self, name):
            self.name = name
    
    p = Person("Alice")
    print(getattr(p, "name"))  # 输出: Alice
    
  2. 方法获取与调用

    class Calculator:
        def add(self, a, b):
            return a + b
    
    calc = Calculator()
    method = getattr(calc, "add")
    print(method(2, 3))  # 输出: 5
    
  3. 安全属性访问(使用默认值)

    value = getattr(p, "age", 30)  # 如果p没有age属性,返回30
    

实际应用场景

  1. 动态调用方法
    在插件系统或策略模式中,可以根据配置动态调用不同方法:

    methods = ["save_to_db", "save_to_file"]
    for method in methods:
        func = getattr(processor, method)
        func(data)
    
  2. 处理未知属性
    在数据转换或API响应处理时,可以安全地获取可能不存在的字段:

    response = {"name": "Bob"}
    age = getattr(response, "age", "unknown")
    
  3. 实现类似switch-case的功能

    def handle_case1(): pass
    def handle_case2(): pass
    
    case = "case1"
    handler = getattr(sys.modules[__name__], f"handle_{case}")
    handler()
    

注意事项

  1. getattr() 会触发属性查找机制,包括描述符协议和 __getattr__ 方法
  2. hasattr()setattr() 通常配合使用
  3. 性能考虑:频繁使用反射可能影响性能,在关键路径上要谨慎使用

相关函数

getattr() 的这种动态特性使得它在框架开发、元编程和灵活的代码结构中非常有用,但也要注意不要过度使用而影响代码的可读性。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP