zoukankan      html  css  js  c++  java
  • Python:__getattr__ 和 __getattribute__ 方法

    __getattr__

    __getattr__方法的自动执行,需要满足两个条件:一是通过实例访问属性;二是触发了AttributeError异常(属性不存在)。

     

     上图中,调用不存在的job属性,会首先调用__getattribute__方法,触发AttributeError异常并自动捕获,然后才调用__getattr__方法。

      __getattribute__

    该方法可以拦截对对象属性的所有访问企图,当属性被访问时,自动调用该方法(只适用于新式类)。

     

    通过上图中的代码示例可以看出,一旦实现了__getattribute__方法,所有通过对象访问的属性(包括类属性)都会被拦截,而直接通过类访问类属性则不会。

    调用父类的方法super().__getattribute__(item),实现:
    1)通过对象访问属性时,可以正常返回值;
    2)当调用的属性不存在时,会抛出异常AttributeError,并调用__getattr__方法;
  • 相关阅读:
    poj 1200 crasy search
    cdoj 1092 韩爷的梦
    fzu 2257 saya的小熊饼干
    zoj 3950 how many nines
    zoj 3963 heap partion
    fzu 2256 迷宫
    fzu 2253 salty fish
    hdu 2473 Junk-Mail Filter
    codeforces 129B students and shoes
    hdu 3367 Pseudoforest
  • 原文地址:https://www.cnblogs.com/test123/p/14201415.html
Copyright © 2011-2022 走看看