__init __ (self) -> None: vs __init __ (self): in python [duplikat]
Apa perbedaan antara 1) __init__(self) -> None:dan 2) __init__(self):?
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)
Jawaban
Bagian itu -> Noneadalah petunjuk tipe. Ini diperkenalkan di PEP 484. Anda dapat membaca lebih lanjut di sini . Kedua __init__metode yang Anda tunjukkan setara dalam waktu proses. Petunjuk tipe dapat digunakan oleh pemeriksa tipe, seperti mypy atau Pyright .
Ini bagian dari mypydokumentasi merangkum sempurna:
Karena mypy adalah penganalisis statis, atau alat seperti lint, anotasi tipe hanyalah petunjuk untuk mypy dan tidak mengganggu saat menjalankan program Anda. Anda menjalankan program Anda dengan interpreter Python standar, dan anotasi diperlakukan secara efektif sebagai komentar.
Ini juga merupakan bagian yang menarik dari PEP 484 yang menjelaskan alasan di balik menempatkan -> Nonedi __init__metode.
(Perhatikan bahwa jenis kembalian init harus dianotasi dengan -> Tidak ada. Alasan untuk ini tidak kentara. Jika init mengasumsikan anotasi kembalian -> None, apakah itu berarti bahwa metode init tanpa argumen, tanpa anotasi harus masih menjadi tipe-diperiksa? Daripada membiarkan ini ambigu atau memperkenalkan pengecualian ke pengecualian, kami hanya mengatakan bahwa init harus memiliki anotasi kembali; perilaku default dengan demikian sama seperti untuk metode lain.)