将 Python 匿名实例与 __dict__ 一起使用

Using Python anonymous instance with __dict__

我有以下代码:

mock_reporter_obj = type('DbUserObjMock', (object,), {
    'uuid': 'test_uuid',
    'username': 'test_username',
})()

test = mock_reporter_obj.__dict__

我希望在测试中得到以下结果

{
        'uuid': 'test_uuid',
        'username': 'test_username',
}

但我得到的是一个空字典。

有人知道问题出在哪里吗?我如何才能在匿名函数上调用 __dict__ 获得预期的属性?

uuidusername 只是 class 属性,因此它们不属于实例属性字典 (obj.__dict__),而是属于 class 字典 ( cls.__dict__):

代码

mock_reporter_obj = type('DbUserObjMock', (object,), {
  'uuid': 'test_uuid',
  'username': 'test_username',
})

obj = mock_reporter_obj()

print(mock_reporter_obj.__dict__)

输出

{'uuid': 'test_uuid', 'username': 'test_username', '__module__': '__main__', '__dict__': <attribute '__dict__' of 'DbUserObjMock' objects>, '__weakref__': <attribute '__weakref__' of 'DbUserObjMock' objects>, '__doc__': None}

如果您像往常一样声明 class,也会发生同样的情况:

代码

class A:
  a = 9

a = A()

print(A.__dict__)
print(a.__dict__)

输出

{'__module__': '__main__', 'a': 9, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
{}