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



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

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

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

你也可以只做Foo.__name__ = 'Bar',我用obj.__class__.__name__来符合你的问题。

是的。

class A:
    def __init__(self):
        self.__class__.__name__ = 'B'

但这似乎是个坏主意。

您可以这样做:

>>> class Foo(object):
...     def __init__(self):
...             self.__class__.__name__ = "Bar"
... 
>>> print Foo().__class__.__name__
Bar

或者,您可以制作自己的双下划线属性。

>>> class Foo(object):
...     __name__ = "Bar"
... 
>>> print Foo().__name__
Bar

但你为什么要这么做?我认为这没有任何可能的用处。顺便说一句,我意识到这与__class__.__name__不同,但我认为更改__class__.__name__通常不是一个好主意。

相关内容

最新更新