どうすればPythonのようにできますか:
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Classinfoのリストを渡すことはできません。
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
isinstanceofany
関数とは何ですか?
isinstance()
は、2番目の引数のクラスのTupleを取ります。最初の引数がそのシーケンス内の型のanyのインスタンスである場合、trueを返します。
_isinstance(var, (classinfo1, classinfo2, classinfo3))
_
つまり、isinstance()
alreadyは、この機能をすぐに使用できます。
isinstance()
documentation から:
classinfoがクラスオブジェクトでも型オブジェクトでもない場合、クラスまたは型オブジェクトのタプルであるか、再帰的に他のオブジェクトを含む可能性がありますタプル(他のシーケンスタイプは受け入れられません)
重点鉱山;再帰的な性質に注意してください。 _(classinfo1, (classinfo2, classinfo3))
_も有効なオプションです。
あなたはすでにあなたの質問のタイトルにかなり近づいていました。 any
とリストを使用できます。
var = 7.0
var_is_good = any([isinstance(var, classinfo1),
isinstance(var, classinfo2),
isinstance(var, classinfo3), ...
isinstance(var, classinfoN)])
しかし、 isinstance
のドキュメントを見ると明らかになります:
オブジェクト引数がclassinfo引数のインスタンス、またはその(直接、間接、または仮想)サブクラスのインスタンスである場合、trueを返します。 objectが指定されたタイプのオブジェクトではない場合、関数は常にfalseを返します。 classinfoがクラス(タイプオブジェクト)でない場合、それはタイプオブジェクトのタプルであるか、または他のそのようなタプルを再帰的に含む可能性があります(他のシーケンスタイプは受け入れられません)。 classinfoが型または型のタプルとそのようなタプルでない場合、TypeError例外が発生します。
これは、それを行うためのより良い方法であることを意味します
var = 7.0
var_is_good = isinstance(var, (classinfo1,
classinfo2,
classinfo3,
...,
classinfoN))
これで問題が解決します:
valid_instance_types = <Tuple of types you want to allow>
var_is_good = isinstance(var, valid_instance_types)
ドキュメント に基づいて、タイプの値をisinstance
に渡すことができる多くの方法があります。
また、これが単なる一部であるより複雑な検証を行おうとしている場合は、 voluptuous を調べることもできます。
通常はisinstance
を使用するべきではありませんが、したいことは any() 組み込み関数で実現できます。
var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])