我如何覆盖__getattr__ https://docs.python.org/3/reference/datamodel.html#object.__getattr__类的方法而不破坏默认行为?
压倒一切__getattr__
应该没事 -__getattr__
仅作为最后手段调用,即如果实例中没有与名称匹配的属性。例如,如果您访问foo.bar
, then __getattr__
仅当以下情况时才会被调用foo
没有名为的属性bar
。如果您不想处理该属性,请引发AttributeError
:
class Foo(object):
def __getattr__(self, name):
if some_predicate(name):
# ...
else:
# Default behaviour
raise AttributeError
然而,与__getattr__
, __getattribute__
将首先被调用(仅适用于新样式类,即从对象继承的类)。在这种情况下,您可以保留默认行为,如下所示:
class Foo(object):
def __getattribute__(self, name):
if some_predicate(name):
# ...
else:
# Default behaviour
return object.__getattribute__(self, name)
See Python 文档了解更多信息 http://docs.python.org/reference/datamodel.html#object.__getattr__.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)