중첩 추상 클래스의 전체 형식 서명을 어떻게 확인할 수 있습니까? 이 예파이썬 : 재귀 isinstance 검사
In [4]: from typing import Sequence
In [5]: IntSeq = Sequence[int]
In [6]: isinstance([1], IntSeq)
Out[6]: True
In [7]: isinstance([1.0], IntSeq)
Out[7]: True
에서 나는 단지 인수가 Sequence
것을 확인하면서 마지막 isinstance
호출이 실제로 False
을 반환합니다. 나는 약 재귀 적 유형을 확인 생각했지만, 중첩 된 유형 (들)을 저장할 공용 속성 IntSeq
이 없습니다 :
In [8]: dir(IntSeq)
Out[8]:
['__abstractmethods__',
'__class__',
'__delattr__',
'__dict__',
'__dir__',
'__doc__',
'__eq__',
'__extra__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__le__',
'__len__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__origin__',
'__parameters__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__slots__',
'__str__',
'__subclasshook__',
'__weakref__',
'_abc_cache',
'_abc_negative_cache',
'_abc_negative_cache_version',
'_abc_registry']
그래서이 중첩 된 유형을 얻을 간단하지 않는 것입니다. 문서에서 관련 정보를 찾을 수 없습니다.
P. 다중 발송 구현에이 기능이 필요합니다. __parameters__
및 __args__
: 알렉산더 Huszagh와 블렌더의 피드백에
업데이트
덕분에 우리는 이제 파이썬 3.5에서 추상 클래스가 중첩 된 형식을 저장하는 두 가지 속성을 가지고 (수)를 것을 알고있다. 전자는 Linux (Ubuntu)와 Darwin (OS X) 모두에 있지만 Linux의 경우에는 비어 있습니다. 나중에는 Linux에서만 사용할 수 있으며 OS X에서는 __parameters__
과 같은 유형을 저장합니다.이 구현 세부 정보는 혼동을 불러옵니다.
가까운 투표자에게 "가능한 많은 답변이 있거나 좋은 답변이이 형식에 비해 너무 길어질 수 있습니다. 답변 세트를 좁히거나 문제를 격리하기위한 세부 정보를 추가하십시오. 몇 단락으로 대답 할 수 있습니다. " –
isinstance ([ "hello"], int_seq)'또한'True'입니다. 간단한 유형 확인 대신 입력을 사용하려고 할 때 해결하는 것보다 더 큰 문제를 만들지 않습니까? –
@DmitryTorba 파이썬에서 실제 다중 디스패치를 구현하려고하므로 전체 형식 서명을 검사 할 수 있도록 디스패처가 필요합니다. –