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 int
không phải là máy int
s. (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.)
int
và float
dườ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.