[PYTHON] 파이썬 : 객체가 명명 된 튜플의 인스턴스인지 확인하는 방법은 무엇입니까?
PYTHON파이썬 : 객체가 명명 된 튜플의 인스턴스인지 확인하는 방법은 무엇입니까?
객체가 명명 된 튜플의 인스턴스인지 어떻게 확인합니까?
해결법
-
==============================
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.나는 이것이 오래되었다는 것을 알았지 만, 나는 이것이 유용하다는 것을 알았다.
나는 이것이 오래되었다는 것을 알았지 만, 나는 이것이 유용하다는 것을 알았다.
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.namedtuple에서 특정 함수를 호출하기 전에 확인해야한다면, 그냥 호출하고 예외를 잡으십시오. 이것이 파이썬에서 선호되는 방법입니다.
namedtuple에서 특정 함수를 호출하기 전에 확인해야한다면, 그냥 호출하고 예외를 잡으십시오. 이것이 파이썬에서 선호되는 방법입니다.
-
==============================
4.나는 사용한다
나는 사용한다
isinstance(x, tuple) and isinstance(x.__dict__, collections.abc.Mapping)
내게는 명명 된 튜플의 특성에 대한 사전 측면을 가장 잘 반영하는 것으로 보인다. 생각할 수있는 미래의 변경에 대해서도 강건하게 보입니다. 그런 일이 발생하면 많은 타사 namedtuple-ish 클래스와도 작동 할 수 있습니다.
-
==============================
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)
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
'PYTHON' 카테고리의 다른 글
[PYTHON] 방향을 따르는 점들의 집합을 그룹화하는 알고리즘 (0) | 2018.11.13 |
---|---|
[PYTHON] 팬더 데이터 프레임에서 2 열의 값을 단일 열로 합치십시오. (0) | 2018.11.13 |
[PYTHON] Python Paramiko를 사용하여 SSH를 통해 명령 / 스크립트에 입력 / 변수 전달 (0) | 2018.11.13 |
[PYTHON] 멀티 인덱스로 팬더 DataFrame을 어떻게 이동합니까? (0) | 2018.11.13 |
[PYTHON] 판다에서 주어진 범위 내에서 임의의 날짜 생성하기 (0) | 2018.11.13 |