我在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 "打印。为什么呢?
答案 0 :(得分:2)
您正在运行Python 2,而您的D
类是旧式的,而不是新式的。 __getattribute__
is used for new-style classes only
作为一项规则,我将以下内容置于可能在Python 2下运行的所有模块的顶部,以确保定义的所有类都是隐式的新式(并且不会对Py3造成任何损害,而忽略它):
__metaclass__ = type
或者,您可以显式继承object
(或任何其他符合您需求的新式类)来获取新式类。
答案 1 :(得分:1)
将D类更改为新样式类D(对象):
{{1}}