__init __ (ตัวเอง) -> ไม่มี: vs __init __ (ตัวเอง): ใน python [ซ้ำ]
อะไรคือความแตกต่างระหว่าง 1) __init__(self) -> None:และ 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)
คำตอบ
-> Noneส่วนหนึ่งเป็นคำใบ้ประเภท มันถูกนำมาใช้ใน PEP 484. คุณสามารถอ่านเพิ่มเติมได้ที่นี่ ทั้งสอง__init__วิธีที่คุณแสดงนั้นเทียบเท่ากันในรันไทม์ คำแนะนำประเภทสามารถใช้โดยการตรวจสอบชนิดเช่นmypyหรือPyright
mypyเอกสารประกอบชิ้นนี้สรุปได้อย่างสมบูรณ์แบบ:
เนื่องจาก mypy เป็นเครื่องวิเคราะห์แบบคงที่หรือเครื่องมือที่มีลักษณะเป็นขุยคำอธิบายประกอบประเภทจึงเป็นเพียงคำแนะนำสำหรับ mypy และไม่รบกวนเมื่อเรียกใช้โปรแกรมของคุณ คุณรันโปรแกรมของคุณด้วยตัวแปล Python มาตรฐานและคำอธิบายประกอบจะถือว่าเป็นความคิดเห็นอย่างมีประสิทธิภาพ
นี้ยังเป็นชิ้นส่วนที่น่าสนใจของ PEP 484 ที่อธิบายถึงเหตุผลที่อยู่เบื้องหลังการวาง-> Noneใน__init__วิธีการ
(โปรดทราบว่าประเภทการส่งคืนของinitควรมีการใส่คำอธิบายประกอบด้วย -> ไม่มีเหตุผลสำหรับสิ่งนี้มีความละเอียดอ่อนหากinitถือว่าคำอธิบายประกอบการส่งคืนเป็น -> ไม่มีนั่นหมายความว่าเมธอดinitที่ไม่มีอาร์กิวเมนต์และไม่มีคำอธิบายประกอบควร ยังคงได้รับการตรวจสอบประเภทหรือไม่แทนที่จะปล่อยให้คลุมเครือหรือแนะนำข้อยกเว้นให้กับข้อยกเว้นเราเพียงแค่บอกว่าinitควรมีคำอธิบายประกอบการส่งคืนลักษณะการทำงานเริ่มต้นจึงเหมือนกับวิธีการอื่น ๆ )