我的目标是让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不能很好地工作,因为它们完全覆盖对该属性的访问,但如果它有效,那将是一个很好的方法。
答案 0 :(得分:0)
我认为没有办法绕过它,但有一种很好的(r)修改方式__getattr__
:
def __getattr__(self, item):
if item == "foo" and not self.foo:
return calculate_default()
return self.__getattribute__(foo)
希望它有所帮助:)