Wie mache ich pythonisch:
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Es scheint albern, dass ich nicht einfach eine Liste von Klasseninfos einreichen kann:
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
Was ist also die isinstanceofany
Funktion?
python
types
isinstance
D Adams
quelle
quelle
number
ODER, das einen Sympy-Ausdruck zurückgibt)). Ich möchte überprüfen, ob die von mir generierte Funktion das tut, was sie tun soll, wenn ich sie an andere Funktionen weitergebe.Antworten:
isinstance()
nimmt ein Tupel von Klassen für das zweite Argument. Es wird return true , wenn das erste Argument eine Instanz ist jede der Arten in dieser Reihenfolge:Mit anderen Worten, bietet diese Funktionalität
isinstance()
bereits sofort an.Aus der
isinstance()
Dokumentation :Hervorhebung von mir; beachte die rekursive Natur;
(classinfo1, (classinfo2, classinfo3))
ist auch eine gültige Option.quelle
Sie waren dem Titel Ihrer Frage schon ziemlich nahe. Sie könnten
any
und eine Liste verwenden:var = 7.0 var_is_good = any([isinstance(var, classinfo1), isinstance(var, classinfo2), isinstance(var, classinfo3), ... isinstance(var, classinfoN)])
Aber ein Blick in die Dokumente von
isinstance
enthüllt:Dies bedeutet, dass dies der bessere Weg ist
var = 7.0 var_is_good = isinstance(var, (classinfo1, classinfo2, classinfo3, ..., classinfoN))
quelle
isinstance
nur mit demclassinfo
Wechsel scheint nicht sehr Pythonic mir.var.__class__
. Ist es das was du willst? @ Makoto: Ich stimme zu. Überhaupt nicht pythonisch!any()
mit einer Liste ist .. sinnlos. Verwenden Sie einen Generatorausdruck, wenn Sie ihn verwenden müssenany()
. Dann profitieren Sie zumindest vom frühen Beenden.isinstance
mit Tupel ist der richtige Weg. Ich wollte nur die Lösung erwähnen,any
da es das zu sein schien, wonach er im Titel fragt.Dies wird Ihr Problem lösen:
Basierend auf der Dokumentation gibt es viele Möglichkeiten, Werte von Typen an zu übergeben
isinstance
.Sie könnten sich auch mit Sinnlichkeit befassen, wenn Sie versuchen, eine kompliziertere Validierung durchzuführen, von der dies nur ein Teil ist.
quelle
Sie sollten im Allgemeinen nicht verwenden
isinstance
, aber was Sie tun möchten, können Sie mit der integrierten Funktion any () erreichen.var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])
quelle
isinstance()
bietet die Funktionalität sofort ohne Verwendungany()
.isinstance()
ist irrelevant.isinstance()
. Vielen Dank.