Mối quan hệ IS-A nào giữa List[str]
và Sequence[str]
có sử dụng khi chú thích không?
Đây là điểm chính để lấy đi. Kiểm tra xem loại có phải là loại phụ của loại khác không phải là một cái gì đó bạn nên làm trong khi nhập chú thích mã của bạn. Đây thường là một cái gì đó đã được nhận thấy và là lý do tại sao có một cuộc tranh luận trên the nuking of __subclasscheck__
.
Như Mark Shannon states in a comment:
Nó có ý nghĩa để kiểm tra xem một loại là một subtype của một loại, nhưng đó là công việc của một kiểm tra tĩnh và không thuộc trong module gõ.
Dù bằng cách nào, kiểm tra là all made in GenericMeta
s __subclasscheck__
, các metaclass với nhiều loại generic
Như là, việc thực hiện hiện nay là tập trung hơn vào những trường hợp loại container là tương tự nhưng các loại phụ kịch bản của họ khác nhau, trong này trường hợp, kiểm tra được thực hiện tùy thuộc vào các loại kịch bản phụ là covariant or contravariant. Ví dụ, List
loại là không phải, như vậy, kiểm tra đối với một mối quan hệ subtype
với:
issubclass(List[bool], List[int]) # checks if bool == int
lợi nhuận sai. Đối với trình tự, các loại là hiệp biến, như vậy, sản lượng sau True
:
issubclass(Sequence[bool], Sequence[int]) # checks if bool is a subclass of int
Mặt khác, với nhiều loại mà không một loại nhất định (như trong trường hợp đầu tiên của bạn):
issubclass(List, Sequence)
__subclasscheck__
trong GenericMeta
sẽ delegate đến __subclasscheck__
in ABCMeta
nơi sẽ đánh giá thành True
.
Cuối cùng, nếu hai loại khác nhau, như trong:
issubclass(List[str], Sequence[str])
và các lớp cơ sở trong issubclass
call is an instance of GenericMeta
, False
được trả về; điều kiện này được thỏa mãn cho hầu hết các loại trong số typing
.
Bất kể trường hợp nào đáng nói đến là điều này có thể không tồn tại trong bản phát hành trong tương lai hoặc hành vi của nó có thể hoàn toàn khác; mô-đun vẫn là tạm thời.
Tại sao phải như vậy? 'List [str]' và 'Sequence [str]' giống như các trường hợp; các dạng cụ thể của loại chung. 'list()' cũng không phải là một lớp con của 'abc.Sequence()'. –
Hoặc đặt nó khác: * Sử dụng * sẽ là mối quan hệ IS-A giữa 'Danh sách [str]' và 'Chuỗi [str]' có khi chú thích? –