将 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__
获得预期的属性?
uuid
和 username
只是 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}
{}
我有以下代码:
mock_reporter_obj = type('DbUserObjMock', (object,), {
'uuid': 'test_uuid',
'username': 'test_username',
})()
test = mock_reporter_obj.__dict__
我希望在测试中得到以下结果
{
'uuid': 'test_uuid',
'username': 'test_username',
}
但我得到的是一个空字典。
有人知道问题出在哪里吗?我如何才能在匿名函数上调用 __dict__
获得预期的属性?
uuid
和 username
只是 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}
{}