python - site - Como verificar se uma variável é uma classe ou não?




web scraping python (6)

Eu queria saber como verificar se uma variável é uma classe (não uma instância!) Ou não.

Eu tentei usar a função isinstance(object, class_or_type_or_tuple) para fazer isso, mas eu não sei que tipo teria uma classe.

Por exemplo, no código a seguir

class Foo: pass  
isinstance(Foo, **???**) # i want to make this return True.

Eu tentei substituir " class " com ??? , mas eu percebi que a class é uma palavra-chave em python.

https://code.i-harness.com


A maneira mais simples é usar inspect.isclass como postado na resposta mais votada.
os detalhes da implementação podem ser encontrados em python2 inspect e python3 inspecionar .
para classe de novo estilo: isinstance(object, type)
para a classe antiga: isinstance(object, types.ClassType)
em, para a classe de estilo antigo, é usando types.ClassType , aqui está o código de types.py :

class _C:
    def _m(self): pass
ClassType = type(_C)

Essa verificação é compatível com o Python 2.xe o Python 3.x.

import six
isinstance(obj, six.class_types)

Esta é basicamente uma função de wrapper que realiza a mesma verificação da resposta de andrea_crotti.

Exemplo:

>>> import datetime
>>> isinstance(datetime.date, six.class_types)
>>> True
>>> isinstance(datetime.date.min, six.class_types)
>>> False

Melhor ainda: use a função inspect.isclass .

>>> import inspect
>>> class X(object):
...     pass
... 
>>> inspect.isclass(X)
True

>>> x = X()
>>> isinstance(x, X)
True
>>> y = 25
>>> isinstance(y, X)
False

O inspect.isclass é provavelmente a melhor solução, e é realmente fácil ver como ele é realmente implementado

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, types.ClassType))

isinstance(X, type)

Retorna True se X for class e False se não for.


>>> class X(object):
...     pass
... 
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True






reflection