美文网首页
python属性拦截器__getattribute__

python属性拦截器__getattribute__

作者: Oo晨晨oO | 来源:发表于2017-07-03 10:51 被阅读176次

python 内建属性 getattribute 是属性拦截器,当调用其他属性时,会先调用它来看看是否有调用属性值之前的操作

class People(object):

    def __init__(self, age, name):
        self.age = age
        self.name = name

    def __getattribute__(self, obj):
        if obj == 'age':
            print("被询问了年龄:")
            return object.__getattribute__(self, obj)
        elif obj == 'name':
            print('被询问了名字')
            return object.__getattribute__(self, obj)
        else:
            return object.__getattribute__(self, obj)

p1 = People(13, '小明')
print(p1.age)
print(p1.name)

上面的代码可以看到,每次调用实例属性的时候, 属性名字会先作为字符串传到 getattribute 方法中的 obj 中, 此时我们可以在 getattribute方法中来对传入的obj进行判断,如果是我们需要进行操作的属性,就在return之前进行操作. 如果还需要return原来的属性结果, 那么就调用 object 类的getattribute 返回即可

输出结果:

被询问了年龄:
13
被询问了名字
小明

注意,在getattribute方法内部, 如果没有把握, 不要再次调用self.xxx 方法. 因为点方法会再次调用 getattribute 方法, 从而形成循环调用, 程序崩溃

相关文章

  • 内建属性

    1、dir(instance)#查看当前对象的属性 2、属性拦截器:__getattribute__(),只要调用...

  • python属性拦截器__getattribute__

    python 内建属性 getattribute 是属性拦截器,当调用其他属性时,会先调用它来看看是否有调用属性值...

  • Python中内建属性__getattribute__

    https://blog.csdn.net/yitiaodashu/article/details/78974596

  • 类的内建属性

    __getattribute__方法的使用: 使用这个方法可以在调用属性时触发,返回值即为属性值,使用父类的__g...

  • 【Python】实例查找属性的顺序

    子类父类所有获取属性的方法都在时,最先调用的是当前类的__getattribute__方法,依次注释当前调用到的方...

  • Python __getattribute__ vs __get

    相信大家看到这个标题的时候也会立马在脑海里面过一遍,觉得大多数时候我们并不太需要关注getattribute和ge...

  • Python中__get__、__getattribute__、

    顺序依次为: get 仅在作为类属性的值且被访问时,经过此函数 getattribute 已存在的属性 若不存在属...

  • OkHttp3(九)--RealInterceptorChain

    RealInterceptorChain 拦截器链表存储器,里面存储了所有的拦截器,还有一些网络请求属性 每次执行...

  • Proxy和Reflect

    Proxy和Reflect 拦截操作get(target,propKey,receiver) 读取属性时拦截拦截器...

  • Python的属性搜索

    这是我总结的Python属性搜索的加长版,完整的描述了Python在做属性访问时的过程。了解Python属性搜索的...

网友评论

      本文标题:python属性拦截器__getattribute__

      本文链接:https://www.haomeiwen.com/subject/aeeicxtx.html