복붙노트

[PYTHON] 파이썬 : 객체가 명명 된 튜플의 인스턴스인지 확인하는 방법은 무엇입니까?

PYTHON

파이썬 : 객체가 명명 된 튜플의 인스턴스인지 확인하는 방법은 무엇입니까?

객체가 명명 된 튜플의 인스턴스인지 어떻게 확인합니까?

해결법

  1. ==============================

    1.collections.namedtuple이라는 함수를 호출하면 항목이 모든 문자열 인 터플 인 _fields라는 멤버가있는 튜플의 하위 클래스 인 다른 유형은 없습니다. 그래서 당신은이 모든 것을 하나씩 점검 할 수 있습니다.

    collections.namedtuple이라는 함수를 호출하면 항목이 모든 문자열 인 터플 인 _fields라는 멤버가있는 튜플의 하위 클래스 인 다른 유형은 없습니다. 그래서 당신은이 모든 것을 하나씩 점검 할 수 있습니다.

    def isnamedtupleinstance(x):
        t = type(x)
        b = t.__bases__
        if len(b) != 1 or b[0] != tuple: return False
        f = getattr(t, '_fields', None)
        if not isinstance(f, tuple): return False
        return all(type(n)==str for n in f)
    

    이것으로부터 거짓 긍정 (false positive)을 얻는 것은 가능하지만 누군가가 이름이있는 튜플과 비슷하지만 하나가 아닌 타입을 만들기 위해 자신의 길을 떠나고있는 경우에만 ;-).

  2. ==============================

    2.나는 이것이 오래되었다는 것을 알았지 만, 나는 이것이 유용하다는 것을 알았다.

    나는 이것이 오래되었다는 것을 알았지 만, 나는 이것이 유용하다는 것을 알았다.

    from collections import namedtuple
    
    SomeThing = namedtuple('SomeThing', 'prop another_prop')
    SomeOtherThing = namedtuple('SomeOtherThing', 'prop still_another_prop')
    
    a = SomeThing(1, 2)
    
    isinstance(a, SomeThing) # True
    isinstance(a, SomeOtherThing) # False
    
  3. ==============================

    3.namedtuple에서 특정 함수를 호출하기 전에 확인해야한다면, 그냥 호출하고 예외를 잡으십시오. 이것이 파이썬에서 선호되는 방법입니다.

    namedtuple에서 특정 함수를 호출하기 전에 확인해야한다면, 그냥 호출하고 예외를 잡으십시오. 이것이 파이썬에서 선호되는 방법입니다.

  4. ==============================

    4.나는 사용한다

    나는 사용한다

    isinstance(x, tuple) and isinstance(x.__dict__, collections.abc.Mapping)
    

    내게는 명명 된 튜플의 특성에 대한 사전 측면을 가장 잘 반영하는 것으로 보인다. 생각할 수있는 미래의 변경에 대해서도 강건하게 보입니다. 그런 일이 발생하면 많은 타사 namedtuple-ish 클래스와도 작동 할 수 있습니다.

  5. ==============================

    5.루츠 (Lutz) 게시 내용 개선 :

    루츠 (Lutz) 게시 내용 개선 :

    def isinstance_namedtuple(x):                                                               
      return (isinstance(x, tuple) and                                                  
              isinstance(getattr(x, '__dict__', None), collections.Mapping) and         
              getattr(x, '_fields', None) is not None)                                  
    
  6. from https://stackoverflow.com/questions/2166818/python-how-to-check-if-an-object-is-an-instance-of-a-namedtuple by cc-by-sa and MIT license