是否有一种很好的(r)方法可以在对象中使用默认值

时间:2017-02-10 14:05:24

标签: python-3.x properties member

我的目标是让python3中的对象在属性访问方面表现正常,除非通过正常查找无法获取属性,它应该以其他方式获取/计算该值。

我知道可以通过定义require 'sidekiq/testing' Sidekiq::Testing.inline! 方法来解决问题:

__getattr__

但感觉如此python2所以我想知道在python3中是否有更优雅的方式来做到这一点。仅定义 def __getattr__(self, key): if key == 'foo': return calculate_default_foo() elif key == 'bar': return getattr(dfltobj, 'bar') elif key == 'frob': return 42 raise AttributeError s不能很好地工作,因为它们完全覆盖对该属性的访问,但如果它有效,那将是一个很好的方法。

1 个答案:

答案 0 :(得分:0)

我认为没有办法绕过它,但有一种很好的(r)修改方式__getattr__

def __getattr__(self, item):
    if item == "foo" and not self.foo:
        return calculate_default()
    return self.__getattribute__(foo)

希望它有所帮助:)