如何在 Python class 中模拟 .users.get?
How to emulate .users.get in Python class?
我想创建一个具有属性 .users.get 并且没有在 class 中实现它们的虚构微型class(我打算使用这个 class 作为 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}]
__getattr__
仅在未找到 users
时才会调用。因为你显然有一个 self.users
它会被发现并 returned.
__getattribute__
将被调用(几乎总是),并允许您拦截 returned 值。
最佳方法恕我直言:
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}]
一个属性不能return你想要的list
,因为你想调用这个属性。这意味着您必须 return self
然后 self
将被调用,就好像它是 users
的 get
方法一样,并且 return list
(其中嵌入了 dict
)
我想创建一个具有属性 .users.get 并且没有在 class 中实现它们的虚构微型class(我打算使用这个 class 作为 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}]
__getattr__
仅在未找到 users
时才会调用。因为你显然有一个 self.users
它会被发现并 returned.
__getattribute__
将被调用(几乎总是),并允许您拦截 returned 值。
最佳方法恕我直言:
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}]
一个属性不能return你想要的list
,因为你想调用这个属性。这意味着您必须 return self
然后 self
将被调用,就好像它是 users
的 get
方法一样,并且 return list
(其中嵌入了 dict
)