有没有一种简单的方法可以递归地将 __name__ 添加到 MagicMock 属性

is there a simple way of adding __name__ to MagicMock attributes recursively

声明

当我询问 MagicMock 对象的 __name__ 时,我得到一个 AttributeError => 我认为这就是 MagicMock 的工作方式。

from mock import MagicMock
a = MagicMock()
a.__name__

-------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
----> 1 a.__name__

这很容易解决:

a.__name__ = "some_name"

但是

a.some_attr.__name__
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
----> 1 a.some_attr.__name__

我当然会问任何更深层次的属性 returns 一个 AttributeError

问题

有没有一种简单的方法可以将 __name__ 添加到 MagicMock 的“尚未”请求的属性中??

好的解决方案比预期的要容易

>>> from unittest.mock import MagicMock

>>> class MySpecialMagicMock(MagicMock):
>>>     __name__ = "some value"

>>> a = MySpecialMagicMock()

>>> a.__name__
some value

>>> a.another_attribute.__name__    
some value