Khi phân lớp các kiểu nội trang, tôi nhận thấy sự khác biệt khá quan trọng giữa Python 2 và Python 3 trong kiểu trả về của các phương thức của các kiểu dựng sẵn. Mã sau minh họa điều này cho các bộ:Phân lớp các kiểu nội trang trong Python 2 và Python 3
class MySet(set):
pass
s1 = MySet([1, 2, 3, 4, 5])
s2 = MySet([1, 2, 3, 6, 7])
print(type(s1.union(s2)))
print(type(s1.intersection(s2)))
print(type(s1.difference(s2)))
Với Python 2, tất cả các giá trị trả về là loại MySet
. Với Python 3, kiểu trả về là set
. Tôi không thể tìm thấy bất kỳ tài liệu nào về kết quả được cho là gì, cũng như bất kỳ tài liệu nào về sự thay đổi trong Python 3.
Dù sao, điều tôi thực sự quan tâm là: có cách đơn giản trong Python 3 để lấy hành vi được nhìn thấy trong Python 2, mà không định nghĩa lại mọi phương thức duy nhất của các kiểu dựng sẵn?
Mở Python 2 chỉ loại của 's1' là có liên quan không phải là loại của' s2 '. – agf
Nó tương tự như cách 'Sai + Sai' là' 0', không phải 'Sai' (' bool' là một phân lớp của 'int', nhân tiện). –