[python] 목록에 isinstance 유형이 있는지 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()두 번째 인수에 대한 클래스 튜플 을 받습니다 . 첫 번째 인수가 해당 시퀀스의 유형 하나의 인스턴스이면 true를 반환합니다 .

isinstance(var, (classinfo1, classinfo2, classinfo3))

즉, 은 (는 ) isinstance() 이미이 기능을 즉시 제공하고 있습니다.

로부터 isinstance()문서 :

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를 반환합니다. 객체가 주어진 유형의 객체가 아니면 함수는 항상 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.

이것이 단지 일부에 불과한 더 복잡한 검증을 시도하는 경우 에도 육감적 일 수 있습니다 .


답변

일반적으로을 사용해서는 isinstance안되지만 원하는 것은 any () 내장 함수 로 수행 할 수 있습니다 .

var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])


답변