__getattribute__

目录

  • __getattr__
  • __getattribute__
  • __getattr__与__getattribute__

__getattr__

  • 不存在的属性访问,触发__getattr__
class Foo:
    def __init__(self, x):
        self.x = x

    def __getattr__(self, item):
        print('执行的是我')
        # return self.__dict__[item]

f1 = Foo(10)
print(f1.x)
10
f1.xxxxxx
执行的是我

__getattribute__

  • 查找属性无论是否存在,都会执行

  • 你可真霸道呀!!!
class Foo:
    def __init__(self, x):
        self.x = x

    def __getattribute__(self, item):
        print('不管是否存在,我都会执行')

f1 = Foo(10)
f1.x
不管是否存在,我都会执行
f1.xxxxxx
不管是否存在,我都会执行

__getattr__与__getattribute__

  • 当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,除非__getattribute__在执行过程中抛出异常AttributeError
#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'

class Foo:
    def __init__(self, x):
        self.x = x

    def __getattr__(self, item):
        print('执行的是我')
        # return self.__dict__[item]
    def __getattribute__(self, item):
        print('不管是否存在,我都会执行')
        raise AttributeError('哈哈')

f1 = Foo(10)
f1.x
不管是否存在,我都会执行
执行的是我
f1.xxxxxx
不管是否存在,我都会执行
执行的是我

原文地址:https://www.cnblogs.com/nickchen121/p/10991198.html

时间: 2024-07-31 06:36:06

__getattribute__的相关文章

Python3基础 __getattribute__ 在访问一个存在的属性时,新增提示功能

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: class MyClass : def __init__(self,work) : self.work=work #真是敬佩小甲鱼老师,他是怎么想到这么写的,巧妙呀 def __getattribute__(self,name): print("你正在访问一个存在属性"

python __setattr__, __getattr__, __delattr__,__getattribute__

参考资料 __setattr__.__getattr__和__delattr__以及__getattribute__可以拦截对对象属性的访问: >>> s = Something() >>> s.age = 3 set 'age' = 3 >>> s.age 3 注意到,s.age并没有调用__getattr__,是因为__getattr__方法只在属性没有找到的时候调用. 虽然相比于Property,实现优点复杂(可能效率更低?),但是足够灵活,功能

python3中__get__,__getattr__,__getattribute__的区别

__get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常. object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发Attrib

转载Python中__getattr__ __getattribute__ __get__解释

来源:http://www.myexception.cn/perl-python/620096.html python中__get__,__getattr__,__getattribute__的区别 __get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常. object.__get

python中__get__,__getattr__,__getattribute__的区别

__get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常. object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发Attrib

python中getattr(),__getattr__(),__getattribute__()探究

getattr() 为 函数,而__getattr__(), __getattribute__()为类的方法 1. getattr() 参数为 (object,attr_name,default value) 会调用该object的__getattribute__()方法,如果没有返回值,继续调用__getattr__()方法 2. 任何调用实例的属性值,都会调用到__getattribute__方法,如果没有返回值会继续调用__getattr__(),也就是__getattr__() 相当于e

飘逸的python - __get__ vs __getattr__ vs __getattribute__以及属性的搜索策略

差别: __getattribute__:是无条件被调用.对不论什么对象的属性訪问时,都会隐式的调用__getattribute__方法,比方调用t.__dict__,事实上运行了t.__getattribute__("__dict__")函数.所以假设我们在重载__getattribute__中又调用__dict__的话,会无限递归,用object大神来避免,即object.__getattribute__(self, name). __getattr__:仅仅有__getattri

python中__get__ vs __getattr__ vs __getattribute__以及属性的搜索策略

其中,__getattribute__是无条件被调用. 对任何对象的属性访问时,都会隐式的调用__getattribute__方法,比如调用t.__dict__,其实执行了t.__getattribute__("__dict__")函数.所以如果我们在重载__getattribute__中又调用__dict__的话,会无限递归,用object大神来避免,即object.__getattribute__(self, name). 只有__getattribute__找不到的时候,才会调用

__getattribute__(self, obj) 这个方法中的obj这个参数

class Itcast(object): def __init__(self, subject1): self.subject1 = subject1 print("^^^^^^^-------%s" %self.subject1) self.subject2 = 'cpp' def __getattribute__(self, obj): print("===========1============") print("-------%s"

python__高级 : 类的__getattribute__ 方法

在类 里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用   函数()    这种方式就可以调用它 在调用实例的方法的时候,实际上给对象传过去的只是一个字符串而已, 比如 t = Test() , 假设 func 是 Test类的一个方法,那么 t.func() 是先给类的 __getattribute__ 方法传过去了一个 'func' 字符串 ,经过处理之后返回的是指向 func 函数的引用 ,最