6

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

4

3 回答 3

7

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

>>> 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__与您的问题一致。

于 2012-08-01T23:33:10.503 回答
5

是的。

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

但这似乎是个坏主意。

于 2012-08-01T23:32:05.137 回答
3

你可以这样做:

>>> 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__通常不是一个好主意。

于 2012-08-01T23:34:48.440 回答