collections.abc
소스 코드를 이해하려고합니다. collections.abc의 일관성없는 구현
__subclasshook__
구현 '
Hashable
클래스를 살펴 보자 :
@classmethod
def __subclasshook__(cls, C):
if cls is Hashable:
for B in C.__mro__:
if "__hash__" in B.__dict__:
if B.__dict__["__hash__"]:
return True
break
return NotImplemented
여기에 우리가 먼저의 재산 hash
이 있음을 확인하고이 아닌 거짓 값이 있는지 확인보다. 이 논리는 또한 Awaitable
클래스로 제공됩니다.
그리고 AsyncIterable
클래스의 __subclasshook__
: 여기
@classmethod
def __subclasshook__(cls, C):
if cls is AsyncIterable:
if any("__aiter__" in B.__dict__ for B in C.__mro__):
return True
return NotImplemented
우리가 그냥 __aiter___
재산이며,이 논리는이 패키지에서 다른 클래스에 표시되어 있는지 확인합니다.
이 논리 차이가있는 이유가 있습니까?
그러나 이것은 'Awaitable'이 왜 이것을하는지 설명하지 않습니다. – Bakuriu
@Bakuriu 나는 복사 가능한 붙여 넣기에서부터 'Hashable'바로 다음에 'Awaitable'이 정의되는 것을 보았습니다. [docs] (https://docs.python.org/3.5/library/collections.abc.html#collections.abc.Awaitable)는 'Awaitable'이 항상 제대로 작동하지 않는다고 언급하므로 ABC가 최종 승인되지 않을 수 있습니다. . 엄밀히 말하자면, 다른 ABC가 '해시 가능'을 확인하는 것을 금지하지 않습니다. – MisterMiyagi