代码之家  ›  专栏  ›  技术社区  ›  lony

将Python匿名实例与_dict一起使用__

  •  1
  • lony  · 技术社区  · 7 年前

    我有以下代码:

    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 回复  |  直到 7 年前
        1
  •  2
  •   JoshuaCS    7 年前

    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}
    {}