Jak to zrobić w Pythonie:
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Wydaje się głupie, że nie mogę po prostu przekazać listy informacji klasowych:
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
Więc jaka jest isinstanceofany
funkcja?
python
types
isinstance
D Adams
źródło
źródło
number
LUB, zwraca wyrażenie sympy)). Chcę sprawdzić, czy funkcja, którą wygenerowałem, robi to, co powinna, kiedy przekazuję ją innym funkcjom.Odpowiedzi:
isinstance()
pobiera krotkę klas jako drugi argument. Zwróci wartość true, jeśli pierwszy argument jest instancją dowolnego typu w tej sekwencji:Innymi słowy,
isinstance()
już oferuje tej funkcji, po wyjęciu z pudełka.Z
isinstance()
dokumentacji :Podkreśl moje; zwróć uwagę na rekurencyjną naturę;
(classinfo1, (classinfo2, classinfo3))
jest również prawidłową opcją.źródło
Tytuł pytania był już dość bliski. Możesz użyć
any
i listę:var = 7.0 var_is_good = any([isinstance(var, classinfo1), isinstance(var, classinfo2), isinstance(var, classinfo3), ... isinstance(var, classinfoN)])
Ale patrząc w dokumentach
isinstance
ujawnia:Oznacza to, że najlepszym sposobem na to jest
var = 7.0 var_is_good = isinstance(var, (classinfo1, classinfo2, classinfo3, ..., classinfoN))
źródło
isinstance
tylkoclassinfo
zmiany nie wydaje mi się zbyt Pythonowe.var.__class__
. Czy tego chcesz? @Makoto: Zgadzam się. Wcale nie Pythonic!any()
lista jest ... bezcelowa. Użyj wyrażenia generatora, jeśli musisz go użyćany()
, a przynajmniej uzyskasz korzyść z wczesnego wyjścia.isinstance
z krotką jest do zrobienia. Chciałem tylko wspomnieć o rozwiązaniu,any
ponieważ wydawało się, że jest to, o co prosi w tytule.To rozwiąże Twój problem:
Bazując na dokumentacji, istnieje wiele sposobów przekazywania wartości typów do
isinstance
.Możesz również spojrzeć na zmysłowy, jeśli próbujesz wykonać bardziej skomplikowaną weryfikację, której to tylko część.
źródło
Generalnie nie powinieneś używać
isinstance
, ale to, co chcesz zrobić, można osiągnąć za pomocą wbudowanej funkcji any () .var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])
źródło
isinstance()
oferuje funkcjonalność po wyjęciu z pudełka bez użyciaany()
.isinstance()
ma znaczenia.isinstance()
? Dziękuję Ci.