Python高阶--自定义属性访问

可自定义下列方法对类实例属性访问(t.name的使用、赋值或删除)的具体含义

object.__getattr__(self, name)

  当默认属性访问因失败时而引发AttributeError而调用__getattr__()方法,如:调用__getattribute__()时由于name不是一个实例属性或self的类关系树中的属性而引发了AttributeError;或者是对name属性调用__get__()时引发了AttributeError。__getattr__()方法就会返回(找到的)属性值或是返回引发的AttributeError异常。注意:若属性是通过正常机制找到的,__getattr__就不会被调用

  

 

 

object.__getattribute__(self, name)

  此方法是会无条件被调用以实现对类实例属性的访问。若类还定义了__getattr__(),则__getattr__()就不会被调用,除非是__getattribute__()显示地调用它或是引发了AttributeError,__getattr__()方法就会返回(找到的)属性值或是返回引发的AttributeError异常;为了避免此方法的无线递归,我们都是调用具有相同名称的基类方法来访问所需的任何属性,如:object.__getattribute__(self, name)

  

 

 

object.__setattr__(self, name,value)

  此方法在一个属性被尝试赋值时调用,这个调用会取代正常机制(即将值保存到实例字典)。name为属性名称,value为要赋给属性的值。

  如果__setattr__()想要赋值给一个实例属性,它应该调用同名的基类方法,例如:object.__setattr__(self, name, value)

  

 

 

  

posted @   哩子吖  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示