Tôi đang sử dụng Python 3.5.1 và bộ phân tích loại tĩnh mới MyPy v0.4.1.Tại sao xác định loại đối số cho __eq__ ném lỗi loại MyPy?
Tôi có một số mã phức tạp hơn mà tôi đã giảm xuống này lớp python có thể đơn giản nhất cần thiết để tái tạo các lỗi:
class MyObject(object):
def __init__(self, value: int=5) -> None:
self.value = value
def __eq__(self, other: MyObject) -> bool:
return self.value == other.value
Chạy kiểm tra loại mypy test.py
sản xuất các lỗi sau:
test.py: note: In class "MyObject":
test.py:5: error: Argument 1 of "__eq__" incompatible with supertype "object"
Lý thuyết của tôi dựa trên these docs là __eq__
và __neq__
trên đối tượng có các loại đã được xác định, đang xung đột với định nghĩa lại lớp con của tôi về các loại này. Câu hỏi của tôi là làm cách nào để xác định các loại này để đảm bảo rằng __eq__
được kiểm tra loại với loại đã chọn của tôi.
Re: đề cập đến 'MyObject' bên trong cơ thể của chính nó, tôi đã làm điều đó ở nơi khác trong mã của tôi mà không trích dẫn và tôi không nhận được lỗi nào từ MyPy: https://github.com/pirate/py-data/blob/ master/recursive_descent_parser.py # L78 –
@NickSweeting: Bạn đã chạy nó chưa? [Bạn sẽ nhận được một lỗi khi bạn cố gắng để chạy nó.] (Http://ideone.com/vk5VX6) – user2357112
Ah, nhờ @ user2357112, tôi chỉ cố gắng mypy-ing nó và bỏ bê để thực sự chạy nó. Thay đổi nó thành chuỗi hoạt động. –