1. ホーム
  2. python

Python: self.__class__ vs. type(self) [重複].

2023-08-16 01:36:52

質問

との違いが気になるところです。

class Test(object):
    def __init__(self):
        print self.__class__.__name__

class Test(object):
    def __init__(self):
        print type(self).__name__

?

どちらか一方を好む理由はあるのでしょうか?

(私の使用例では、ロガー名を決定するために使用したいのですが、これは問題ではないでしょう)

どのように解決するのですか?

>>> class Test(object): pass
>>> t = Test()
>>> type(t) is t.__class__
True
>>> type(t)
__main__.Test

この2つは同じなんですね。 の方が分かりやすいからです。

しかし self.__class__ は旧式のクラスでは動作しません。なぜなら、旧式のクラスのインスタンスの型は type(t) であるのに対し、新スタイルのクラスのインスタンスの型はそのクラスであるためです。

instance