__init __ (ตัวเอง) -> ไม่มี: vs __init __ (ตัวเอง): ใน python [ซ้ำ]

Sep 25 2020

อะไรคือความแตกต่างระหว่าง 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)

คำตอบ

radzak Sep 25 2020 at 21:57

-> Noneส่วนหนึ่งเป็นคำใบ้ประเภท มันถูกนำมาใช้ใน PEP 484. คุณสามารถอ่านเพิ่มเติมได้ที่นี่ ทั้งสอง__init__วิธีที่คุณแสดงนั้นเทียบเท่ากันในรันไทม์ คำแนะนำประเภทสามารถใช้โดยการตรวจสอบชนิดเช่นmypyหรือPyright

mypyเอกสารประกอบชิ้นนี้สรุปได้อย่างสมบูรณ์แบบ:

เนื่องจาก mypy เป็นเครื่องวิเคราะห์แบบคงที่หรือเครื่องมือที่มีลักษณะเป็นขุยคำอธิบายประกอบประเภทจึงเป็นเพียงคำแนะนำสำหรับ mypy และไม่รบกวนเมื่อเรียกใช้โปรแกรมของคุณ คุณรันโปรแกรมของคุณด้วยตัวแปล Python มาตรฐานและคำอธิบายประกอบจะถือว่าเป็นความคิดเห็นอย่างมีประสิทธิภาพ

นี้ยังเป็นชิ้นส่วนที่น่าสนใจของ PEP 484 ที่อธิบายถึงเหตุผลที่อยู่เบื้องหลังการวาง-> Noneใน__init__วิธีการ

(โปรดทราบว่าประเภทการส่งคืนของinitควรมีการใส่คำอธิบายประกอบด้วย -> ไม่มีเหตุผลสำหรับสิ่งนี้มีความละเอียดอ่อนหากinitถือว่าคำอธิบายประกอบการส่งคืนเป็น -> ไม่มีนั่นหมายความว่าเมธอดinitที่ไม่มีอาร์กิวเมนต์และไม่มีคำอธิบายประกอบควร ยังคงได้รับการตรวจสอบประเภทหรือไม่แทนที่จะปล่อยให้คลุมเครือหรือแนะนำข้อยกเว้นให้กับข้อยกเว้นเราเพียงแค่บอกว่าinitควรมีคำอธิบายประกอบการส่งคืนลักษณะการทำงานเริ่มต้นจึงเหมือนกับวิธีการอื่น ๆ )