Was's der kanonische Weg, um für Typ in Python überprüfen?

Wie kann man am besten prüfen, ob ein bestimmtes Objekt von einem bestimmten Typ ist? Wie wäre es zu prüfen, ob das Objekt von einem bestimmten Typ erbt?

Sagen wir, ich habe ein Objekt "o". Wie prüfe ich, ob es ein "str" ist?

Lösung

Um zu prüfen, ob o eine Instanz von str oder einer Unterklasse von str ist, verwenden Sie isinstance (dies wäre der "kanonische" Weg):

if isinstance(o, str):

Um zu prüfen, ob der Typ von o genau str ist (Unterklassen ausschließen):

if type(o) is str:

Das Folgende funktioniert auch und kann in einigen Fällen nützlich sein:

if issubclass(type(o), str):

Siehe Built-in Functions in der Python Library Reference für relevante Informationen.

Noch ein Hinweis: In diesem Fall, wenn Sie Python 2 verwenden, sollten Sie vielleicht tatsächlich verwenden:

if isinstance(o, basestring):

verwenden, da dies auch Unicode-Strings abfängt (unicode ist keine Unterklasse von str; sowohl str als auch unicode sind Unterklassen von basestring). Beachten Sie, dass basestring in Python 3 nicht mehr existiert, wo es eine strikte Trennung von Strings (str) und binären Daten (bytes) gibt.

Alternativ dazu akzeptiert isinstance ein Tupel von Klassen. Dies gibt True zurück, wenn x eine Instanz einer beliebigen Unterklasse von (str, unicode) ist:

if isinstance(o, (str, unicode)):
Kommentare (6)

isinstance(o, str)gibtTruezurück, wennoeinstrist oder von einem Typ ist, der vonstr` erbt.

type(o) is str gibt True zurück, wenn und nur wenn o ein str ist. Es wird False zurückgegeben, wenn o von einem Typ ist, der von str erbt.

Kommentare (3)