Tại sao "mypy" coi "int" là một kiểu con của "float"? Một kiểu con sẽ hỗ trợ tất cả các phương thức của siêu kiểu của nó, nhưng "float" có các phương thức mà "int" không hỗ trợ:
kiểm tra:
def f(x : float) -> bool:
return x.is_integer()
print(f(123.0))
print(f(123))
Trình kiểm tra kiểu tĩnh chấp nhận chuyển một đối số "int" cho tham số "float":
(3.8.1) myhost% mypy test.py
Success: no issues found in 1 source file
Nhưng điều này không đảm bảo, rằng không có lỗi trong thời gian chạy:
(3.8.1) myhost% python test.py
True
Traceback (most recent call last):
File "test.py", line 5, in <module>
print(f(123))
File "test.py", line 2, in f
return x.is_integer()
AttributeError: 'int' object has no attribute 'is_integer'
bởi vì "float" có các phương thức bổ sung, mà "int" không có.
int Không thể vừa trong một chiếc phao. Python intkhông phải là máy ints. (Dù sao, tôi không chắc nó có liên quan đến việc kiểm tra kiểu như thế nào, điều này không thực sự liên quan đến các kiểu biểu diễn trong thời gian chạy.)
intvà floatdường như hoàn toàn bỏ qua thực tế là cả hai loại đều có phương thức, hoặc ít nhất là các phương pháp khác ngoài __add__et al.