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 に答える