python中可动态为对象添加属性,通过obj.attr = value或setattr(obj, 'attr', value)实现,仅影响当前实例;若类使用__slots__且未包含该属性则报错;还可动态绑定方法并检查删除属性。

Python中可以动态为对象添加属性,这是由其动态类型特性决定的。只要对象不是被冻结(如使用__slots__限制),就能在运行时自由绑定新属性。
直接赋值添加属性
最常用的方式是通过点号语法直接为实例赋值:
- 对实例对象(如
obj)执行obj.new_attr = value,会立即创建并绑定该属性 - 该属性仅属于当前实例,不影响类或其他实例
- 如果类定义了
__slots__且未包含该属性名,则会抛出AttributeError
使用setattr()函数
适合属性名来自变量或需条件控制的场景:
-
setattr(obj, 'attr_name', value)等价于obj.attr_name = value - 可配合字符串拼接、循环批量设置,例如:
for k, v in data.items(): setattr(obj, k, v) - 若属性名非法(如含空格、以数字开头),会触发
AttributeError
动态添加方法(绑定函数到实例)
普通函数默认不绑定,需手动绑定为绑定方法:
采用 php+mysql 数据库方式运行的强大网上商店系统,执行效率高速度快,支持多语言,模板和代码分离,轻松创建属于自己的个性化用户界面 v3.5更新: 1).进一步静态化了活动商品. 2).提供了一些重要UFT-8转换文件 3).修复了除了网银在线支付其它支付显示错误的问题. 4).修改了LOGO广告管理,增加LOGO链接后主页LOGO路径错误的问题 5).修改了公告无法发布的问题,可能是打压
立即学习“Python免费学习笔记(深入)”;
- 用
types.MethodType(func, obj)将函数绑定到指定实例 - 再通过
setattr(obj, 'method_name', bound_method)挂载 - 注意:该方法只对该实例有效;若想所有实例共享,应动态添加到类(
cls.method = func)
检查与删除动态属性
可通过内置函数验证和清理:
-
hasattr(obj, 'attr')判断是否存在(含继承链) -
getattr(obj, 'attr', default)安全获取,避免异常 -
delattr(obj, 'attr')或del obj.attr删除实例属性
动态添加属性灵活但需谨慎:过度使用会降低代码可读性与可维护性,建议在明确需要运行时扩展行为(如插件系统、ORM字段映射)时采用。









