如何在Python类中模拟.users.get?
我想用attributes.users.get创建一个虚构的micro类,并且在类内部没有它们的实现(我计划在MagicMock中将这个类用作子类(spec=this_类))。我已经读过getattr,但不知道如何正确实现它。也许你能帮我弄明白如何在Python类中模拟.users.get?,python,class,methods,substitution,getattr,Python,Class,Methods,Substitution,Getattr,我想用attributes.users.get创建一个虚构的micro类,并且在类内部没有它们的实现(我计划在MagicMock中将这个类用作子类(spec=this_类))。我已经读过getattr,但不知道如何正确实现它。也许你能帮我弄明白 class A(object): def __getattr__(self, attr): if attr == 'users': self.__getattr__(self.users, 'get') if attr
class A(object):
def __getattr__(self, attr):
if attr == 'users':
self.__getattr__(self.users, 'get')
if attr == 'get':
return [{'uid': 4444444}]
只有在未找到
用户
的情况下,才会调用\uuuu getattr\uuuu
。因为您显然有一个self.users
,它将被找到并返回
\uuuu getattribute\uuuu
将被调用(几乎总是),并允许您截取返回值
最佳方法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}]
属性无法返回所需的
列表
,因为您希望调用该属性。这意味着您必须返回self
,然后self
将被调用,就像它是users
的get
方法一样,并将返回列表
(其中嵌入了dict
)我想补充一点,稍后我想这样调用它:mocked_object.users.get()[0]['uid']那么attr.get()是在哪里实现的呢?我认为注释与问题不符。如果你想这样调用用户
,你根本不需要\uuu getattr\uuu
或\uu getattribute\uu
。您的属性users
将被返回,并且该属性将有一个get
方法。否则,解决方案是返回实例。让我再加上第二个选项。我看你已经接受了答案。但我仍然没有完全理解你的问题(直到我在接受的答案中读到你的评论,我才理解“电话”)。你想使用MagicMock,还是避免?这门课是什么?什么是A
?