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

# coding: utf-8


class A(object):
    a = "A.class"

    def __init__(self):
        self.a = "A.instance"
        pass

    def __getattribute__(self, item):
        return "A.__getattribute__"

    def __getattr__(self, item):
        return "A.__getattr__"


class B(A):
    a = "B.class"

    def __init__(self):
        super(B, self).__init__()
        self.a = "B.instance"
        pass

    def __getattribute__(self, item):
        return "B.__getattribute__"

    def __getattr__(self, item):
        return "B.__getattr__"

inst = B()

print inst.a

子类父类所有获取属性的方法都在时,最先调用的是当前类的__getattribute__方法,依次注释当前调用到的方法,查看下一个调用的方法是什么,出现的顺序如下所示:

  • B.__getattribute__
  • A.__getattribute__
  • B.instance
  • A.instance
  • B.class
  • A.class
  • B.__getattr__
  • A.__getattr__
  • AttributeError: 'B' object has no attribute 'a'
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,943评论 0 8
  • 人生苦短我用 Python 注:最后附电子书地址 一、Pythonic Thinking 第1条: 确认自己所用的...
    molscar阅读 2,056评论 0 3
  • 简介 Python 中,一切皆对象。 当我们访问某个对象属性时,在不同的情况下,Python 对属性的访问机制有所...
    Whyn阅读 1,391评论 1 3
  • 9月11日,小米举办新品发布会,会上共发布了第二代全面屏手机小米MIX 2,小米Note 3和小米笔记本Pro。本...
    3C菜鸟阅读 348评论 0 0
  • 其实我差不多能够猜到你为什么请我吃饭。就算不请我吃饭,我依然会像以前一样不遗余力地帮你,这是毫无疑问的事情。除去其...
    _简简单单阅读 185评论 0 0