Como faço para fazer pitonicamente:
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Parece bobo, não posso simplesmente passar uma lista de informações de classe:
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
Então, qual é a isinstanceofany
função?
python
types
isinstance
D Adams
fonte
fonte
number
OR ele retorna uma expressão sympy)). Quero verificar se a função que gerei faz o que deveria quando eu a passo para outras funções.Respostas:
isinstance()
recebe uma tupla de classes para o segundo argumento. Ele retornará verdadeiro se o primeiro argumento for uma instância de qualquer um dos tipos nessa sequência:isinstance(var, (classinfo1, classinfo2, classinfo3))
Em outras palavras,
isinstance()
já oferece essa funcionalidade, fora da caixa.Da
isinstance()
documentação :Ênfase minha; observe a natureza recursiva;
(classinfo1, (classinfo2, classinfo3))
também é uma opção válida.fonte
Você já chegou perto do título da sua pergunta. Você pode usar
any
e uma lista:var = 7.0 var_is_good = any([isinstance(var, classinfo1), isinstance(var, classinfo2), isinstance(var, classinfo3), ... isinstance(var, classinfoN)])
Mas olhando nos documentos de
isinstance
revela:Isso significa que a melhor maneira de fazer isso é
var = 7.0 var_is_good = isinstance(var, (classinfo1, classinfo2, classinfo3, ..., classinfoN))
fonte
isinstance
apenas com aclassinfo
mudança não parece muito pitônico para mim.var.__class__
. É isso que você quer? @Makoto: Eu concordo. Nem um pouco pitônico!any()
com uma lista é ... inútil. Use uma expressão geradora se precisar usarany()
, pelo menos você terá o benefício da saída antecipada.isinstance
com tupla é o melhor caminho. Eu só queria mencionar a solução comany
o que parece ser o que ele está pedindo no título.Isto irá resolver o seu problema:
valid_instance_types = <tuple of types you want to allow> var_is_good = isinstance(var, valid_instance_types)
Com base na documentação, existem várias maneiras de passar valores de tipos para
isinstance
.Você também pode parecer voluptuoso se estiver tentando fazer uma validação mais complicada da qual isso seja apenas uma parte.
fonte
Você geralmente não deveria usar
isinstance
, mas o que deseja fazer pode ser realizado com a função embutida any () .var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])
fonte
isinstance()
oferece a funcionalidade pronta para uso, sem usarany()
.isinstance()
é irrelevante.isinstance()
? Obrigado.