python中get和set使用_python属性get和set order是什么?

1586010002-jmsa.png

Python provides us many possibilities on instance/class attribute, for example:

class A(object):

def __init__(self):

self.foo = "hello"

a = A()

There are many ways to access/change the value of self.foo:

direct access a.foo

inner dict a.__dict__['foo']

get and set a.__get__ and a.__set__,of course there two are pre-defined methods.

getattribute a.__getattribute__

__getattr__ and __setattr__

maybe more.

While reading source code, I always get lost of what's their ultimate access order? When I use a.foo, how do I know which method/attribute will get called actually?

解决方案

bar = a.foo...

invokes a.__getattribute__('foo')

which in turn by default looks up a.__dict__['foo']

or invokes foo's .__get__() if defined on A.

The returned value would then be assigned to bar.

a.foo = bar...

invokes a.__getattribute__('foo')

which in turn by default looks up a.__dict__['foo']

or invokes foo's .__set__(bar) if defined on A.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值