Type of an object: ‘obj.__class__’ versus ‘type(obj)’
ned at nedbatchelder.com
Mon Dec 16 03:50:23 CET 2013
On 12/15/13 8:51 PM, Ben Finney wrote:
> Howdy all,
> What is the Pythonic way to determine the type of an object? Are there
> multiple valid ways, and when should each be used?
> We have ‘obj.__class__’, an attribute bound to the object's class. Or is
> it? When is that true, and when should we not rely on it?
> We have ‘type(obj)’, calling the constructor for the ‘type’ type in
> order to get a reference to the type of ‘obj’. Or is it? When is that
> true, and when should we not rely on it?
> Are there other ways to get at the type of a Python object? What reasons
> are there to choose or avoid them?
Generally, my answer would be, "You probably don't need the type as much
as you think you do." But when you do need it, type(x) is better than
x.__class__, simply because we should always favor builtin functions
over direct access of dunder-names where possible.
Also, don't overlook isinstance().
Ned Batchelder, http://nedbatchelder.com
More information about the Python-list