How to define what a class is ?

eryk sun eryksun at gmail.com
Thu Feb 25 06:21:43 EST 2016


On Thu, Feb 25, 2016 at 3:54 AM, ast <nomail at invalid.com> wrote:
> So we can conclude that inspect.isclass(x) is equivalent
> to isinstance(x, type)
>
> lets have a look at the source code of isclass:
>
> def isclass(object):
>    """Return true if the object is a class.
>
>    Class objects provide these attributes:
>        __doc__         documentation string
>        __module__      name of module in which this class was defined"""
>    return isinstance(object, type)

Except Python 2 old-style classes (i.e. 2.x classes that aren't a
subclass of `object`) are not instances of `type`. Prior to new-style
classes, only built-in types were instances of `type`. An old-style
class is an instance of "classobj", and its instances have the
"instance" type.

    >>> class A: pass
    ...
    >>> type(A)
    <type 'classobj'>
    >>> type(A())
    <type 'instance'>

Note that "classobj" and "instance" are instances of `type`.

The `isclass` check in Python 2 has to instead check
isinstance(object, (type, types.ClassType)).

    >>> types.ClassType
    <type 'classobj'>


More information about the Python-list mailing list