it-source

Python은 변수가 목록에 있는 어떤 유형의 인스턴스인지 확인합니다.

criticalcode 2023. 6. 10. 09:26
반응형

Python은 변수가 목록에 있는 어떤 유형의 인스턴스인지 확인합니다.

다음을 압축적으로 수행하려면 어떻게 해야 합니까?

var = 7.0
var_is_good = (
    isinstance(var, classinfo1) or
    isinstance(var, classinfo2) or
    isinstance(var, classinfo3)
)

isinstance()두 번째 인수에 대한 클래스 태플을 사용합니다.첫 번째 인수가 해당 시퀀스에 있는 유형의 인스턴스인 경우 true가 반환됩니다.

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

다른 말로 하면,isinstance() 에서는 이 기능을 즉시 제공합니다.

설명서에서 다음을 참조하십시오.

classinfo가 클래스 개체나 유형 개체가 아닌 경우 클래스 또는 유형 개체의 튜플이거나 재귀적으로 다른 튜플을 포함할 수 있습니다(다른 시퀀스 유형은 허용되지 않음).

내 것을 강조하고, 재귀적인 성격을 주목합니다.(classinfo1, (classinfo2, classinfo3))또한 유효한 옵션입니다.

Python 3.10부터는 새로운 유형 유니온 운영자를 사용할 수 있습니다. 예:

isinstance(var, classinfo1 | classinfo2)

자세한 내용은 PEP 604를 참조하십시오.

당신은 이미 당신의 질문의 제목과 꽤 가까웠습니다.및 목록을 사용할 수 있습니다.

var = 7.0
var_is_good = any([isinstance(var, classinfo1),
                   isinstance(var, classinfo2),
                   isinstance(var, classinfo3), ...
                   isinstance(var, classinfoN)])

하지만 의 문서를 살펴보면 다음과 같습니다.

개체 인수가 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])

언급URL : https://stackoverflow.com/questions/33311258/python-check-if-variable-isinstance-of-any-type-in-list

반응형