python __getitem__()方法理解_python getattr用法[通俗易懂]

python __getitem__()方法理解_python getattr用法[通俗易懂]__getattr__与__getattribute__均是一般实例属性截取函数(genericinstanceattributeinterceptionmethod),其中,__getattr__可以用在python的所有版本中,而__getattribute__只可以用到新类型类中(Ne

大家好,欢迎来到IT知识分享网。

__getattr__与__getattribute__均是一般实例属性截取函数(generic instance attribute interception method),其中,__getattr__可以用在python的所有版本中,而__getattribute__只可以用到新类型类中(New-style class),其主要的区别是__getattr__只截取类中未定义的属性,而__getattribute__可以截取所有属性,下面用代码进行说明:

(1)__getattr__

class c:
    def __init__(self,value):
        self.data=value
    def __getattr__(self,name):
        print('getattr...\n intercept %s'% name)
    @property
    def p(self):
        print(" i'm not intercepted, so you can see me")
>>> x.data
1
>>> x.a
getattr...
 intercept a
>>> x.b
getattr...
 intercept b
>>> x.p
 i'm not intercepted, so you can see me

从上面可以看出,对于类c中已定义的实例属性data,p,均显示了出来,而对于未定义的a,b都进行了拦截。

(2)__getattribute__函数

将上面的代码中的__getattr__换成__getattribute__,其他的不做变动

>>> class c:
    def __init__(self,value):
        self.data=value
    def __getattribute__(self,name):
        print('getattr...\n intercept %s'% name)
    @property
    def p(self):
        print(" i'm intercepted, so you can not see me")
>>> x=c(2)
>>> x.a
getattr...
 intercept a
>>> x.b
getattr...
 intercept b
>>> x.p
getattr...
 intercept p
>>> x.data
getattr...
 intercept data

调用实例的属性,可以发现,全部被__getattrbute__予以了拦截。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/28203.html

(0)
上一篇 2023-09-22 13:45
下一篇 2023-09-25 14:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信