53

What method do I call to get the name of a class?

Azat Ibrakov
  • 9,998
  • 9
  • 38
  • 50
clahey
  • 4,795
  • 3
  • 27
  • 20

5 Answers5

68
In [1]: class Test:
   ...:     pass
   ...: 

In [2]: Test.__name__
Out[2]: 'Test'
Neuron
  • 5,141
  • 5
  • 38
  • 59
Mr Shark
  • 26,068
  • 5
  • 29
  • 37
46

It's not a method, it's a field. The field is called __name__. class.__name__ will give the name of the class as a string. object.__class__.__name__ will give the name of the class of an object.

clahey
  • 4,795
  • 3
  • 27
  • 20
12

I agree with Mr.Shark, but if you have an instance of a class, you'll need to use its __class__ member:

>>> class test():
...     pass
...
>>> a_test = test()
>>>
>>> a_test.__name__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: test instance has no attribute '__name__'
>>>
>>> a_test.__class__
<class __main__.test at 0x009EEDE0>
David C
  • 7,204
  • 5
  • 46
  • 65
Jon Cage
  • 36,366
  • 38
  • 137
  • 215
  • Thanks! This helped dynamically naming a new class created with `type` and multiple bases. (e.g.: `type('_'.join(x.__name__ for x in bases), bases, {})`) – Wesley Baugh Mar 13 '13 at 01:03
4

From Python 3.3 and onwards we can use __qualname__ field for both classes & functions.

It differs from __name__ field for nested objects like class defined in other class

>>> class A:
        class B:
            pass
>>> A.B.__name__
'B'
>>> A.B.__qualname__
'A.B'

which may be quite useful.

Further reading

Azat Ibrakov
  • 9,998
  • 9
  • 38
  • 50
1

In [8]: str('2'.__class__)
Out[8]: "<type 'str'>"

In [9]: str(len.__class__)
Out[9]: "<type 'builtin_function_or_method'>"

In [10]: str(4.6.__class__)
Out[10]: "<type 'float'>"

Or, as was pointed out before,

In [11]: 4.6.__class__.__name__
Out[11]: 'float'

Vlad the Impala
  • 15,572
  • 16
  • 81
  • 124