少し驚くべき挙動。異なるモジュールで同じ名前の2つのクラスが同じ名前を共有します。異なるモジュールの同じ名前のクラスは、まったく同じ名前の文字列を共有しますか?
私はそれを本当に問題にすることはできませんが、誰もがなぜそれを知っていますか、それ以上の驚きの可能性はありますか?
デモ
>>> from a import a
>>> from b import b
>>> ta = a.Test()
>>> tb = b.Test()
>>> ta.__class__.__name__
'Test'
>>> tb.__class__.__name__
'Test'
>>> tb.__class__.__name__ is ta.__class__.__name__ # unexpected
True
>>> ta.__class__
<class 'a.a.Test'>
>>> tb.__class__
<class 'b.b.Test'>
* "Pythonプログラムで使用される名前は自動的にインターンされます" * https://docs.python.org/3/library/sys.html#sys.intern – vaultah
すべてのPython文字列は不変なので、文字列のインターン完全に安全です。 –