__init __ (self) -> None: so với __init __ (self): trong python [trùng lặp]
Sự khác biệt giữa 1) __init__(self) -> None:và 2) là __init__(self):gì?
class A:
def __init__(self) -> None:
self.a = 5
class B:
def __init__(self):
self.a = 5
print (" A : ", A().a)
print (" B : ", B().a)
Trả lời
Phần -> Nonenày là một gợi ý loại. Nó đã được giới thiệu trong PEP 484. Bạn có thể đọc thêm về nó tại đây . Cả hai __init__phương pháp bạn đã hiển thị đều tương đương nhau trong thời gian chạy. Gợi ý loại có thể được sử dụng bởi trình kiểm tra loại, chẳng hạn như mypy hoặc Pyright .
Phần mypytài liệu này tóm tắt nó một cách hoàn hảo:
Vì mypy là một công cụ phân tích tĩnh, hoặc một công cụ giống như xơ vải, nên các chú thích kiểu chỉ là gợi ý cho mypy và không gây trở ngại khi chạy chương trình của bạn. Bạn chạy chương trình của mình với trình thông dịch Python tiêu chuẩn và các chú thích được coi là bình luận một cách hiệu quả.
Đây cũng là một phần thú vị của PEP 484 giải thích cơ sở lý luận của việc áp -> Nonedụng __init__phương pháp này.
(Lưu ý rằng kiểu trả về của init phải được chú thích bằng -> Không có. Lý do cho điều này thật khó hiểu. Nếu init giả sử có chú thích trả về là -> Không, điều đó có nghĩa là phương thức init không có đối số, không có chú thích nên vẫn được kiểm tra kiểu? Thay vì để điều này không rõ ràng hoặc giới thiệu một ngoại lệ cho ngoại lệ, chúng tôi chỉ đơn giản nói rằng init phải có một chú thích trả về; hành vi mặc định giống như đối với các phương thức khác.)