访问实例时不调用python __getattribute__?

时间:2016-11-29 02:02:07

标签: python object getattribute

我在python命令行下获得了以下代码。我希望当我访问属性时,会自动调用 getattribute 。但我没有看到结果

class D:
  def __getattribute__(s,*a,**ka):
    print "__getattribute__"
    return object.__getattribute__(s,*a,**ka)

  def __getattr__(s,name):
    print "__getattr__"
    return name

  def __get__(s,instance,owner):
    print "__get__"
    return s
  a='abc'

class C2(object):
    d=D()

>>> d=D()
>>> c2=C2()
>>> print d.a
abc
>>> print d.zzz
__getattr__

否" getattribute "打印。为什么呢?

2 个答案:

答案 0 :(得分:2)

您正在运行Python 2,而您的D类是旧式的,而不是新式的。 __getattribute__ is used for new-style classes only

作为一项规则,我将以下内容置于可能在Python 2下运行的所有模块的顶部,以确保定义的所有类都是隐式的新式(并且不会对Py3造成任何损害,而忽略它):

__metaclass__ = type

或者,您可以显式继承object(或任何其他符合您需求的新式类)来获取新式类。

答案 1 :(得分:1)

将D类更改为新样式类D(对象):

{{1}}