新闻中心

python中使用_setattr_()

2025-11-25
浏览次数:
返回列表
__setattr__用于控制属性赋值,每次设置属性时触发,可实现验证、只读等逻辑,需通过super().__setattr__或__dict__避免递归。

python中使用_setattr_()

在 Python 中,__setattr__ 是一个特殊方法,用于控制对象属性的赋值行为。每当尝试设置对象的某个属性时,这个方法就会被调用。通过自定义 __setattr__,你可以实现属性验证、只读属性、动态属性管理等高级功能。

基本用法

__setattr__(self, name, value) 接收三个参数:

  • self:实例本身
  • name:要设置的属性名(字符串)
  • value:要设置的属性值

每次执行 self.attr = valuesetattr(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开发框架,有多套免费模版,强大的后台管理功能,专业的网上商城系统解决方案,快速建设网上购物商城、数码商城、手机商城、办公用品商城等网站。 php商城系统v3.0 rc6升级 1、主要修复用户使用中出现的js未加载完报错问题,后台整改、以及后台栏目的全新部署、更利于用户体验。 2、扩展出,更多系统内部的功能,以便用户能够迅速找到需

php商城系统 0 查看详情 php商城系统
  • 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._celsius

t = 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快捷键面板  必由学在线入口 必由学网页版快速登录入口 

搜索