python - 如何在Python类中模拟.users.get?

标签 python class methods substitution getattr

我想创建一个具有属性 .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 将被调用,就好像它是 usersget 方法一样并将返回 list (其中嵌入了 dict)

关于python - 如何在Python类中模拟.users.get?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942955/

相关文章:

C++ STL 容器

http - 有什么方法可以检查 POST url 是否存在?

java - 为什么不必在 Java 中创建对象?

python - 如何从 Python 访问 Oracle?

python - 使用python自动格式化png

python - 通过套接字发送大文件

python - Python中重载构造函数的要点?

java - Java 中是否可以在一条语句中实例化一个类并将其分配给成员变量?

关于final关键字的Java基础

python - 使用 arctan/arctan2 绘制 a 从 0 到 2π