it-swarm.com.de

Wie prüfe ich, ob eine Variable eine Klasse ist oder nicht?

Ich habe mich gefragt, wie ich prüfen kann, ob eine Variable eine Klasse ist (keine Instanz!) Oder nicht.

Ich habe versucht, die Funktion isinstance(object, class_or_type_or_Tuple) zu verwenden, aber ich weiß nicht, welchen Typ eine Klasse haben würde.

Zum Beispiel im folgenden Code

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

Ich habe versucht, "class" durch zu ersetzen ???, aber mir wurde klar, dass class ein Schlüsselwort in Python ist.

187
jeeyoungk

Noch besser: Verwenden Sie die Funktion inspect.isclass .

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

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

Die inspect.isclass ist wahrscheinlich die beste Lösung und es ist sehr einfach zu sehen, wie sie tatsächlich implementiert wird

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))
37
andrea_crotti
>>> class X(object):
...     pass
... 
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True
30
S.Lott
isinstance(X, type)

Gibt True zurück, wenn X die Klasse ist, und False, falls nicht.

19
qnub

class Foo: heißt alte Stilklasse und Klasse X (Objekt): heißt neue Stilklasse. 

Check this Was ist der Unterschied zwischen alten und neuen Stilklassen in Python? . Neuer Stil wird empfohlen. Lesen Sie über " vereinheitlichende Typen und Klassen "

1
JV.

am einfachsten ist es, inspect.isclass wie in der am besten bewerteten Antwort zu verwenden.
Die Implementierungsdetails finden Sie unter python2 inspect und python3 inspect .
für eine Klasse im neuen Stil: isinstance(object, type)
für alte Klasse: isinstance(object, types.ClassType)
em, für die Klasse im alten Stil wird types.ClassType verwendet. Hier ist der Code aus types.py :

class _C:
    def _m(self): pass
ClassType = type(_C)
0
lyu.l

Diese Prüfung ist sowohl mit Python 2.x als auch mit Python 3.x kompatibel. 

import six
isinstance(obj, six.class_types)

Dies ist im Grunde eine Wrapper-Funktion, die dieselbe Prüfung wie in andrea_crotti answer durchführt.

Beispiel:

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