Python 内置函数:setattr()

B站影视 内地电影 2025-08-31 16:59 2

摘要:在 Python 中,对象的属性既可以直接通过点号赋值,也可以在运行时动态添加或修改。内置函数 setattr 就是用于动态设置对象属性和方法的工具。它是反射机制的重要组成部分,常用于框架、配置管理、插件机制等需要灵活操作属性的场景。

在 Python 中,对象的属性既可以直接通过点号赋值,也可以在运行时动态添加或修改。内置函数 setattr 就是用于动态设置对象属性和方法的工具。它是反射机制的重要组成部分,常用于框架、配置管理、插件机制等需要灵活操作属性的场景。

一、函数语法

setattr(object, name, value)

参数:

object:必填,要操作的对象。

name:必填,表示属性或方法名称的字符串。

value:必填,要赋给属性的值或函数名称(或 lambda 表达式)。

返回值:

无返回值(返回 None),仅修改对象的状态。

二、基础用法示例

1、 动态添加属性

class Person:passp = Personsetattr(p, "name", "Alice")print(p.name) # Alice

2、修改已有属性

class Person:def __init__(self, name):self.name = namep = Person("Alice")setattr(p, "name", "Bob")print(p.name) # Bob

3、动态设置方法

class Greeter:passg = Greetersetattr(g, "say_hi", lambda: "Hello!")print(g.say_hi) # Hello!

三、进阶技巧

1、配合 getattr / hasattr 使用

class Person:passp = Personif not hasattr(p, "age"):setattr(p, "age", 20)print(getattr(p, "age")) # 20

2、使用配置字典批量赋值

settings = {"debug": True, "timeout": 30}class Config:passcfg = Configfor k, v in settings.items:setattr(cfg, k, v)print(cfg.debug, cfg.timeout) # True 30

3、动态绑定方法到对象

class Person:passdef greet(self):return f"Hello, {self.name}!"# 把函数作为方法挂到类上setattr(Person, "greet", greet)p = Personp.name = "Alice"print(p.greet) # Hello, Alice!

四、补充说明

1、与点号赋值的关系

obj.attr = value 等价于 setattr(obj, "attr", value)。

区别在于 setattr 支持动态属性名,可以在运行时确定。

2、属性作用域

若属性已存在,会覆盖旧值。

若属性不存在,会直接添加为新属性。

3、与类的关系

如果作用于类对象,则会影响所有实例(共享类属性或方法)。

如果作用于实例,则只影响该实例自身。

4、反射机制

setattr 与 getattr、hasattr、delattr 一起构成了 Python 的反射机制。它们支持运行时动态地访问、修改和删除属性。

小结

setattr 是 Python 用于动态设置对象属性和方法的内置函数。它不仅可以添加新属性,也可以修改已有属性,还能动态绑定方法。在反射、配置管理和框架开发中,setattr 提供了强大的灵活性,是 Python 动态特性的重要体现。

“点赞有美意,赞赏是鼓励”

来源:得过教育

相关推荐