新闻中心
python中使用_setattr_()
__setattr__用于控制属性赋值,每次设置属性时触发,可实现验证、只读等逻辑,需通过super().__setattr__或__dict__避免递归。

在 Python 中,__setattr__ 是一个特殊方法,用于控制对象属性的赋值行为。每当尝试设置对象的某个属性时,这个方法就会被调用。通过自定义 __setattr__,你可以实现属性验证、只读属性、动态属性管理等高级功能。
基本用法
__setattr__(self, name, value) 接收三个参数:
- self:实例本身
- name:要设置的属性名(字符串)
- value:要设置的属性值
每次执行 self.attr = value 或 setattr(obj, 'attr', value) 都会触发它。
示例:
class Person:
def __init__(self, name):
self.name = name # 这里也会触发 __setattr__
<pre class="brush:php;toolbar:false;">def __setattr__(self, name, value):
print(f"正在设置属性: {name} = {value}")
super().__setattr__(name, value)p = Person("Alice") p.age = 25
输出:
正在设置属性: name = Alice 正在设置属性: age = 25
防止无限递归
在 __setattr__ 内部直接使用 self.name = value 会导致无限递归,因为它又会调用 __setattr__。
正确做法是使用父类的 __setattr__ 或操作实例的 __dict__:
php商城系统
PHP商城系统是国内功能优秀的网上商城系统,同时也是一个商业的PHP开发框架,有多套免费模版,强大的后台管理功能,专业的网上商城系统解决方案,快速建设网上购物商城、数码商城、手机商城、办公用品商城等网站。 php商城系统v3.0 rc6升级 1、主要修复用户使用中出现的js未加载完报错问题,后台整改、以及后台栏目的全新部署、更利于用户体验。 2、扩展出,更多系统内部的功能,以便用户能够迅速找到需
0
查看详情
- super().__setattr__('name', value)
- self.__dict__['name'] = value
错误示例(会报 RecursionError):
def __setattr__(self, name, value):
self.name = value # 错误!无限递归
实现属性验证或只读字段
你可以利用 __setattr__ 拦截非法赋值。
例如,限制某属性只能为特定类型:
class Temperature:
def __init__(self, celsius):
self._celsius = celsius
<pre class="brush:php;toolbar:false;"><code>def __setattr__(self, name, value):
if name == "celsius":
if not isinstance(value, (int, float)):
raise TypeError("温度必须是数字")
if value < -273.15:
raise ValueError("温度不能低于绝对零度")
super().__setattr__("_celsius", value)
else:
super().__setattr__(name, value)
@property
def celsius(self):
return self._celsiust = Temperature(25) t.celsius = 30 # 正常
t.celsius = "abc" # 抛出 TypeError
控制动态属性
有时你想禁止随意添加属性,只允许预定义的几个:
class StrictPerson:
__slots__ = ['name', 'age'] # 更推荐用 __slots__
<pre class="brush:php;toolbar:false;"># 或者用 __setattr__ 实现类似效果
def __setattr__(self, name, value):
if name not in {'name', 'age'}:
raise AttributeError(f"不能设置属性 '{name}'")
super().__setattr__(name, value)基本上就这些。只要记住:每次赋值都会触发它,别在内部直接赋值导致循环,用 super() 或 __dict__ 安全操作。合理使用能增强类的行为控制。
以上就是python中使用_setattr_()的详细内容,更多请关注php中文网其它相关文章!
# 你想
# 2024推广网站
# 万年百度网站优化
# 昌都seo公司联系13火星
# 推广本地门户网站
# 做网站优化哪里好
# 土产品营销推广
# 洛河网站推广怎么样可靠吗
# 一瓶水的营销推广
# 青海网站建设哪家比较好
# seo专员工作环境
# 中文网
# 相关文章
# php
# 也会
# 就会
# 几个
# 是一个
# 会报
# 你可以
# 递归
# ai
# python
# 编程
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
12306怎么选座位选到安静区_12306选座安静区域选择策略
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
mc.js游戏直达 mc.js网页免下载版本秒进地址
基于动态规划的房屋花卉种植最小成本算法详解
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
EMS快递官网app_中国邮政速递物流手机客户端
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】
抖音网页版企业服务中心登录入口_抖音网页版企业登录平台
Lar*el DB::listen 事件中的查询执行时间单位解析
浏览器打开即用 美图秀秀网页版入口
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法
html5 app怎么运行环境_配html5 app运行环境【教程】
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
J*aScript数组对象转换:按指定键分组与值收集
使用Python高效删除Word宏并转换DOCM为DOCX格式
美团外卖商家服务中心入口 美团商家版官网入口
c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架
Python大型XML文件高效流式解析教程
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
新手怎么开始学化妆 零基础化妆入门教程
Steam官网入口直达 Steam注册及登录步骤
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
解决J*aScript中重复选择项的确认对话框显示问题
J*aScript中赋值与自增运算符的复杂交互与执行机制
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
2026年CSGO开箱网站推荐 CSGO开箱平台精选
将JSON对象数组转置为键值对列表的实用指南
最新韩小圈网页版登录入口_官网在线观看官方链接
AO3官方在线访问地址 Archive of Our Own最新镜像合集
自定义Bag-of-Words实现:处理带负号的词汇权重
Mac怎么使用表情符号_Mac Emoji快捷键面板
必由学在线入口 必由学网页版快速登录入口


2025-11-25
浏览次数:次
返回列表