我想创建一个具有属性 .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}]
最佳答案
仅当未找到 users
时才会调用
__getattr__
。由于您显然有一个 self.users
,它将被找到并返回。
__getattribute__
将被调用(几乎总是),并允许您拦截返回的值。
恕我直言,最好的方法是:
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
方法一样并将返回 list
(其中嵌入了 dict
)
关于python - 如何在Python类中模拟.users.get?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942955/