Использование анонимного экземпляра Python с __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__
на анонимную функцию?
1 ответ
Решение
uuid
а также username
являются просто атрибутами класса, поэтому они не относятся к словарю атрибутов экземпляра (obj.__dict__
) но к классу диктовать (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 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}
{}