是否可以覆盖从对象派生的`__name__`?

use*_*693 4 python mocking

要获取我们可以使用的类名的字符串表示,obj.__class__.__name__是否可以重载这些方法,以便我可以返回我的字符串而不是实际的类名?

pyr*_*ade 5

是的.

class A:
    def __init__(self):
        self.__class__.__name__ = 'B'
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个坏主意.


And*_*ark 5

我们试试吧!(是的,这有效):

>>> class Foo(object):
...     pass
...
>>> obj = Foo()
>>> obj.__class__.__name__ = 'Bar'
>>> obj
<__main__.Bar object at 0x7fae8ba3af90>
>>> obj.__class__
<class '__main__.Bar'>
Run Code Online (Sandbox Code Playgroud)

你也可以刚刚完成Foo.__name__ = 'Bar',我曾经obj.__class__.__name__和你的问题保持一致.