我想用属性.users.get创建一个虚构的微类,并且没有在类中实现它们(我计划在MagicMock中使用这个类作为替代(spec = This_Class)) 。我已经读过关于getattr但我不知道如何正确实现它。也许你能让我弄明白吗?
class A(object):
def __getattr__(self, attr):
if attr == 'users':
self.__getattr__(self.users, 'get')
if attr == 'get':
return [{'uid': 4444444}]
答案 0 :(得分:1)
__getattr__
时才会调用 users
。由于您显然有self.users
,因此会找到并返回。
__getattribute__
将被调用(几乎总是),并允许您拦截返回的值。
最好的方法imho:
class A(object):
def __getattribute__(self, attrname):
try:
attr = object.__getattribute__(self, attrname)
except AttributeError as e:
raise e
if attrname == 'users':
attr = attr.get()
return attr
根据评论进行编辑:
class A(object):
def __getattr__(self, attrname):
if attrname == 'users':
return self
if attrname == 'get'
return self
raise AttributeError('{} not found'.format(attrname))
def __call__(self)
return [{'uid': 4444444}]
属性无法返回您想要的list
,因为您想要调用该属性。这意味着您必须返回self
,然后self
将被调用,就好像它是get
的{{1}}方法一样,并将返回users
(其中嵌入了list
)