Использование анонимного экземпляра 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}
{}
Другие вопросы по тегам