またの名を、インスタンスを手持ちな場合に class の名前が欲しーの。
Python 2.x まではちょっと繊細な問題もあり。
1 # this example for Python from 2.2 to 2.7
2 class OldStyleClass:
3 pass
4
5 class NewStyleClass(object):
6 pass
7
8 oscobj = OldStyleClass()
9 nscobj = NewStyleClass()
10
11 print(oscobj.__class__.__name__) # => OldStyleClass
12 print(nscobj.__class__.__name__) # => NewStyleClass
13 print(type(oscobj).__name__) # => instance
14 print(type(nscobj).__name__) # => NewStyleClass
15 #print(5.__class__.__name__) # of cource, this causes SyntaxError
16 print((5).__class__.__name__) # => int
17 print(type(5).__name__) # => int
18 print([].__class__.__name__) # => list
19 print(type([]).__name__) # => list
20 print(().__class__.__name__) # => tuple
21 print(type(()).__name__) # => tuple
まず、特に理由がない場合は「旧形式 class」(objectを派生しない class)は書くべきではない。これは、チームで物作りする場合は、規約で決めるとかした方がいいよ。
ただ、旧形式 class が世の中に実在しない、というもんでもないので、移植性を考えれば、
1 obj.__class__.__name__
とするしかないでしょうな。これはやりたくないよね:
1 res = type(obj).__name__
2 if res == 'instance':
3 res = obj.__class__.__name__