Использование анонимного экземпляра Python с __dict__ - PullRequest
0 голосов
/ 09 января 2019

У меня есть следующий код:

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 Ответ

0 голосов
/ 09 января 2019

uuid и username являются просто атрибутами класса, поэтому они не относятся к словарю атрибутов экземпляра (obj.__dict__), а относятся к классу 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}
{}
...