位置: 编程技术 - 正文

详解Python中 __get__和__getattr__和__getattribute__的区别(python的get)

编辑:rootadmin

推荐整理分享详解Python中 __get__和__getattr__和__getattribute__的区别(python的get),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python中get()函数,python__get__,python的getcwd,python的getcwd,python的getcwd,python中get()函数,python中__get__,python中get()函数,内容如对您有帮助,希望把文章链接给更多的朋友!

引子假设我们有个类A,其中a是A的实例a.x时发生了什么&#;属性的lookup顺序如下:

如果重载了__getattribute__,则调用. a.__dict__, 实例中是不允许有descriptor的,所以不会遇到descriptor A.__dict__, 也即a.__class__.__dict__ .如果遇到了descriptor,优先调用descriptor. 沿着继承链搜索父类.搜索a.__class__.__bases__中的所有__dict__. 如果有多重继承且是菱形继承的情况,按MRO(Method Resolution Order)顺序搜索.

如果以上都搜不到,则抛AttributeError异常.

ps.从上面可以看到,dot(.)操作是昂贵的,很多的隐式调用,特别注重性能的话,在高频的循环内,可以考虑绑定给一个临时局部变量.

深入1.object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常。

详解Python中 __get__和__getattr__和__getattribute__的区别(python的get)

2.object.__getattribute__(self, name) 无条件被调用,通过实例访问属性。如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发AttributeError异常)

3.object.__get__(self, instance, owner) 如果class定义了它,则这个class就可以称为descriptor。owner是所有者的类,instance是访问descriptor的实例,如果不是通过实例访问,而是通过类访问的话,instance则为None。(descriptor的实例自己访问自己是不会触发__get__,而会触发__call__,只有descriptor作为其它类的属性才有意义。)(所以下文的d是作为C2的一个属性被调用)

输出结果是:

小结:

可以看出,每次通过实例访问属性,都会经过__getattribute__函数。而当属性不存在时,仍然需要访问__getattribute__,不过接着要访问__getattr__。这就好像是一个异常处理函数。 每次访问descriptor(即实现了__get__的类),都会先经过__get__函数。

需要注意的是,当使用类访问不存在的变量是,不会经过__getattr__函数。而descriptor不存在此问题,只是把instance标识为none而已。

浅谈Python中chr、unichr、ord字符函数之间的对比 ord是unicodeordinal的缩写,即编号chr是character的缩写,即字符ord和chr是互相对应转换的.但是由于chr局限于ascii,长度只有,于是又多了个unichr.c=u'康'cu'u5eb7'ord(

Python构造自定义方法来美化字典结构输出的示例 示例:d={"root":{"folder2":{"item2":None,"item1":None},"folder1":{"subfolder1":{"item2":None,"item1":None},"subfolder2":{"item3":None}}}}美观输出是:观察一下特点:1.同一level的key

Python中的多行注释文档编写风格汇总 什么是docstring在软件工程中,其实编码所占的部分是非常小的,大多是其它的事情,比如写文档。文档是沟通的工具。在Python中,比较推崇在代码中写

标签: python的get

本文链接地址:https://www.jiuchutong.com/biancheng/387673.html 转载请保留说明!

上一篇:Python利用带权重随机数解决抽奖和游戏爆装备问题(python通过编程求权重)

下一篇:浅谈Python中chr、unichr、ord字符函数之间的对比(python中chr(ord()))

  • 律师事务所个人所得税如何计算
  • 一般纳税人金税盘抵税会计分录
  • 代理税务有哪些机构
  • 独资企业的个人所得税怎么缴纳
  • 个人所得税有哪些减免政策
  • 代开了专票,但是销售额没有超过30万怎么处理
  • 总产值和主营业务收入
  • 分期付款方式购入货物会计分录
  • 防暑降温用品计算方法
  • 税务局代增值税专用发票冲红,如何重新申报退税
  • 以股东投资为基础
  • 公司销售二手车账务处理
  • 购买职工宿舍用品账务处理
  • 给了钱不给发票可以报警吗
  • 当月增次月是什么意思
  • 差额征税条件
  • 合并报表盈余公积跟母公司有什么关系
  • 一般企业的会计原始凭证有哪些类型
  • 新建厂房购入材料会计分录
  • 无偿划转净资产为负数的企业账务处理
  • 个体工商户出售住房增值税
  • 转账支票到期了怎么兑现
  • 电脑开机故障不开机
  • macbook sierra
  • 局域网内ip地址冲突怎么找出来
  • 天猫积分类服务费账务处理
  • mediacache是什么文件夹
  • 企业年金在缴费阶段涉及的税种包括
  • 以房产投资入股应当缴纳契税
  • 前端的基本知识
  • vue项目引入ts
  • 支付宝手机网站支付不风控
  • 基于个人同意处理个人信息的个人什么撤回其同意
  • 如何取消axios请求
  • 应收利息的罚息是复利吗
  • 引导式申报带出来的开票额与金税盘显示的不一致
  • 房地产预缴增值税计税依据
  • 一般纳税人只有进项怎么报税
  • 主营业务收入未收到钱
  • 购买备用品会计分录
  • 企业会计准则每股收益
  • 下列项目的进项税额可以从销售税额中抵扣的是
  • 适用税率9%的征税行为有
  • sql server删除表命令
  • 新准则经营租赁 提折旧
  • 费用月结怎么记账
  • 网上代增值税专用发票
  • 其他应付款贷方什么意思
  • 工程服务预交税怎么算
  • 减值损失对公司有哪些影响
  • 固定资产的处置方式包括
  • 多缴纳了个税税率怎么办
  • 工程结算一般由什么等方式
  • 缴纳工会筹备金应该记什么科目
  • 英语培训机构成人浦口区
  • 企业利润的构成内容
  • 企业接受捐赠的固定资产,应增加营业外收入
  • 金税盘里显示有报税资料怎么处理
  • 房租的发票没有收到,账务处理
  • 会计凭证数字书写模板
  • 怎样u盘安装系统软件
  • ubuntu21.04中文
  • swimsuitnetwork.exe - swimsuitnetwork是什么进程 有何作用
  • linux的截图工具
  • unity urp 性能
  • js正则用法
  • JavaScript创建数量n由用户决定的数组
  • websocket解决跨域
  • jquery操作元素的方法
  • 单例类python
  • iframe嵌套页面滚动事件
  • python获取entry里输入的值
  • 基于jquery实现小说
  • python按行读取文本并输出到excel
  • python中django
  • python中的变量和常量ppt
  • python flask框架 web服务器
  • 企业自产自销农产品免税政策有哪些
  • 怎么打印纳税申报清单
  • 山东统一发票查询平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设