您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在不破坏默认行为的情况下在Python中重写__getattr__?

如何在不破坏默认行为的情况下在Python中重写__getattr__?

覆盖__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文档

python 2022/1/1 18:46:17 有370人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶