覆盖
__getattr__应该没问题-
__getattr__只能作为最后的选择,即,如果实例中没有与名称匹配的属性。例如,如果您访问
foo.bar,则
__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)
有关更多信息,请参见Python文档。



