ในคำตอบของอานนท์:
"ถ้าคุณต้องการบางสิ่งจากซุปเปอร์__init__
ที่ต้องทำนอกเหนือจากสิ่งที่กำลังทำอยู่ในคลาสปัจจุบัน__init__
คุณต้องเรียกมันว่าตัวเองเพราะมันจะไม่เกิดขึ้นโดยอัตโนมัติ"
มันเหลือเชื่อมาก: เขาใช้ถ้อยคำที่ขัดกับหลักการสืบทอด
ไม่ใช่ว่า"บางสิ่งจาก super __init__
(... ) จะไม่เกิดขึ้นโดยอัตโนมัติ"มันจะเกิดขึ้นโดยอัตโนมัติ แต่มันไม่ได้เกิดขึ้นเพราะ base-class ' __init__
ถูกแทนที่ด้วยนิยามของคลาสที่ได้รับ__init__
แล้วทำไมต้องกำหนดคลาสที่ได้รับ ' __init__
เนื่องจากมันจะแทนที่สิ่งที่มุ่งเป้าไปที่เมื่อมีคนยอมรับมรดก ??
เป็นเพราะเราจำเป็นต้องกำหนดสิ่งที่ไม่ได้ทำในคลาสพื้นฐาน ' __init__
และความเป็นไปได้เดียวที่จะได้รับสิ่งนั้นคือการทำให้การดำเนินการใน__init__
ฟังก์ชันที่ได้รับมา'
กล่าวอีกนัยหนึ่งก็__init__
คือเราต้องการบางสิ่งบางอย่างในคลาสฐาน ' นอกเหนือจากสิ่งที่จะทำโดยอัตโนมัติในชั้นฐาน' __init__
หากสิ่งหลังนี้ไม่ได้ถูกลบล้าง
ไม่ตรงกันข้าม
จากนั้นปัญหาคือคำสั่งที่ต้องการที่มีอยู่ในคลาสพื้นฐาน ' __init__
จะไม่เปิดใช้งานอีกต่อไปในช่วงเวลาของการสร้างอินสแตนซ์ ในการสั่งซื้อเพื่อชดเชยการใช้งานนี้สิ่งที่พิเศษจะต้อง: เรียกอย่างชัดเจนฐานระดับ__init__
เพื่อที่จะKEEPไม่ได้ที่จะเพิ่มการเริ่มต้นดำเนินการโดยฐานระดับ __init__
นั่นคือสิ่งที่กล่าวไว้ในเอกสารอย่างเป็นทางการ:
วิธีการแทนที่ในคลาสที่ได้รับในความเป็นจริงอาจต้องการขยายมากกว่าเพียงแค่แทนที่เมธอดคลาสฐานที่มีชื่อเดียวกัน มีวิธีง่ายๆในการเรียกใช้เมธอดคลาสฐานโดยตรง: เพียงแค่เรียก BaseClassName.methodname (ตัวเองอาร์กิวเมนต์)
http://docs.python.org/tutorial/classes.html#inheritance
นั่นคือเรื่องราวทั้งหมด:
เมื่อเป้าหมายคือให้การเริ่มต้นดำเนินการโดยคลาสพื้นฐานนั่นคือการสืบทอดที่บริสุทธิ์ไม่มีอะไรพิเศษที่จำเป็นต้องหลีกเลี่ยงการกำหนด__init__
ฟังก์ชันในคลาสที่ได้รับ
เมื่อจุดมุ่งหมายคือการแทนที่การเริ่มต้นที่ดำเนินการโดยคลาสพื้นฐาน__init__
จะต้องกำหนดไว้ในคลาสที่ได้รับ
เมื่อจุดมุ่งหมายคือการเพิ่มกระบวนการไปยังการกำหนดค่าเริ่มต้นที่ดำเนินการโดยคลาสพื้นฐาน__init__
ต้องกำหนดคลาสที่ได้รับซึ่งประกอบด้วยการเรียกอย่างชัดเจนไปยังคลาสฐาน__init__
สิ่งที่ฉันรู้สึกประหลาดใจในโพสต์ของอานนท์ไม่ใช่แค่การแสดงออกที่ตรงกันข้ามกับทฤษฎีการถ่ายทอดทางพันธุกรรมเท่านั้น แต่ยังมีผู้ชาย 5 คนที่ผ่านการโหวตโดยไม่ต้องเปลี่ยนทรงผมและยิ่งไปกว่านั้นไม่มีใครตอบสนองใน 2 ปีใน กระทู้ที่มีหัวข้อที่น่าสนใจต้องอ่านบ่อย
object
นั้นพิมพ์ผิด แต่ตอนนี้คุณยังไม่มีsuper
ชื่อคำถามที่อ้างถึง