Python 小甲鱼教程 属性访问

先开始记录一些

有2个属性的访问方法

__getattr__和__getattribute__

有什么区别呢?

__getattr__: 用于表示访问不存在的属性的行为

__getattribute__:用于表示访问类的属性的行为

自己写个例子来实际看一下

我们可以看到,通过重写魔法方法,我们能看到2种访问属性的方法被调用的先后顺序

__getattribute__下面那个调用super()的目的是,调用原始的属性访问方法,以显示在getattribute访问不到的情况下,调用getattr函数的情况







下面一题是写一个类代码,使下面内容可以通过

自己重写了__getattr__和__setattr__两个魔法方法,但是发现实现不了,后来观察发现,他是在第一次调用不存在的属性的时候,返回FishC的

所以应该是__getattr__里面有一句要返回出FishC的


这里注意,如果不写self.name='FischC'的话,写成print ('FishC'),那么getattr里面不能写return self.name这一句,不然会进入死循环,原因是,return的后面这句话实际上又是在访问了name这个不存在的属性,然后就等于又调用了一遍print函数

具体可以看下面第二张图里面的测试





我们可以看到,如果是print的话,他在return的时候又等于访问了一遍,然后又去调用getattr这个函数了,再又打印了一遍,进入死循环




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值