เราได้พูดถึงการห่อหุ้ม เกี่ยวกับสิ่งที่เป็นนามธรรม
แล้วเสาหลักที่สามของ OP ล่ะ?
เรียกว่ามรดก
และการสืบทอดทำให้อ็อบเจ็กต์ใหม่รับคุณสมบัติของอ็อบเจ็กต์ที่มีอยู่
เพื่อให้คุณสามารถสืบทอดคลาสได้
มาดูตัวอย่างกัน
ลบโค้ดเดิมที่เรามีแล้วกลับไปที่ตัวอย่างเกมของเรา
เราต้องการสร้างเกมใหม่และเรามีผู้ใช้ประเภทต่างๆ
เรามีผู้ใช้ที่สามารถเป็นพ่อมดได้ อย่างอื่นก็ได้ ไม่รู้สิ นักธนู แต่ผู้ใช้ทั้งหมดนี้มีฟังก์ชันที่เหมือนกัน
และผู้ใช้ย่อยแต่ละคน เช่น พ่อมด เอลฟ์ นักธนู ก็มีบางอย่างที่เหมือนกัน ฟังก์ชั่นที่ใช้ร่วมกัน
แต่แล้วอีกครั้ง การโจมตีที่แตกต่างกัน
ดังนั้นการใช้ OP เราจึงสามารถสืบทอดได้จริง
ตัวอย่างเช่น สมมติว่าเรามีผู้ใช้คลาสที่นี่ และผู้ใช้รายนี้จะมี สมมติว่า ฟังก์ชันการลงชื่อเข้าใช้
หรือวิธีการลงชื่อเข้าใช้อีกครั้ง มันจะรับตัวเอง จากนั้นเราจะสมมติว่าเรามีการเข้าสู่ระบบบางอย่างที่นี่
สมมติว่าตอนนี้พิมพ์บล็อก
และเนื่องจากในการเล่นเกม พวกเขาต้องเข้าสู่ระบบ
ตอนนี้ คุณอาจจะสงสัยว่า โฮ่ โฮ่ โฮ่ วิธีการเริ่มต้นที่นี่อยู่ที่ไหน
เราควรจะมีวิธี init นั้นที่รันก่อนไม่ใช่หรือ?
เราก็ทำได้ แต่ถ้าเราไม่มีตัวแปรหรือแอตทริบิวต์ใด ๆ ที่เราต้องการกำหนดให้กับผู้ใช้ ในกรณีนี้
เราก็ไม่ต้องการวิธีการ A
สำหรับตอนนี้ เราจะบอกว่าเราไม่ต้องการ ไม่มีอะไรที่ผู้ใช้มีนอกจากวิธีการลงชื่อเข้าใช้นี้
ตอนนี้ สมมติว่าเราต้องการสร้างคลาสย่อยหลายๆ คลาส เพื่อให้เรามีตัวช่วยสร้างคลาส
และสำหรับตอนนี้ เราจะทำผ่านที่นี่เพื่อที่เราจะได้ไม่มีคลาสที่ว่างเปล่า แต่มันจะยังช่วยให้เราสร้างมันได้
แล้วสมมุติว่าเรามีคลาสด้วย
นักธนูที่จะผ่านเช่นกัน
โอ้.
ตรวจสอบให้แน่ใจว่าเรามีวงเล็บอยู่ที่นี่
เอาล่ะ นี่คือสิ่งที่
ตามหลักการแล้ว พ่อมดและนักธนูเหล่านี้ล้วนเป็นผู้ใช้เช่นกัน
ถูกต้อง.
ดังนั้นเราจึงมีผู้ใช้
และผู้ใช้เหล่านี้สามารถมีได้หลายรูปแบบ
พวกเขาสามารถเป็นพ่อมดได้
พวกเขาสามารถเป็นนักธนู
พวกเขาสามารถเป็นยักษ์
ตัวละครทั้งหมดในเกมของเรา
แต่สมมติว่าต้องลงชื่อเข้าใช้ก่อน
เราจะแน่ใจได้อย่างไรว่าผู้ใช้หรือชั้นเรียนทั้งหมดเหล่านี้มีสิทธิ์เข้าถึงเพื่อลงชื่อเข้าใช้ด้วย
เราสามารถใช้มรดกได้
แล้วเราจะรับมรดกได้อย่างไร?
ค่อนข้างง่ายจริง
ทั้งหมดที่เราทำอยู่ในวงเล็บ
ผ่านคลาสพาเรนต์ที่เราต้องการสืบทอด
สมมุติว่าฉันทำผู้ใช้ที่นี่
ตอนนี้มาคลิกเรียกใช้ที่นี่
ไม่มีการออกอากาศ
ทุกอย่างกำลังดูดี
และอีกอย่าง คุณเห็นเส้นสีเขียวตรงนี้บอกฉันว่าการเยื้องไม่ใช่ผลคูณของสี่ เพราะการย่อหน้าควรเป็นสี่ใน
Python
เราก็ทำได้แค่นี้
แต่ฉันชอบทำให้มันเล็กลงเพื่อให้อ่านง่ายขึ้น
ตกลง.
ลองยกตัวอย่างคลาสที่นี่
ฉันจะสร้างวิซาร์ดหนึ่งแล้วพูด
ตัวช่วยสร้างและเรียกใช้คลาสตัวช่วยสร้างนั้น
ตอนนี้ ถ้าฉันพิมพ์ที่นี่ และฉันทำ สมมติว่าวิซาร์ดการพิมพ์
ถ้าฉันคลิกเรียกใช้
ฉันเห็นว่าวัตถุวิซาร์ดถูกสร้างขึ้นแล้ว
และถ้าฉันไม่ลงชื่อเข้าใช้ล่ะ
ฉันเห็นว่า
ใช่ มันอยู่ที่นั่นจริงๆ
ถ้าฉันลงชื่อเข้าใช้แล้วคลิกเรียกใช้
เฮ้ ฉันเข้าสู่ระบบแล้ว
มันเจ๋งแค่ไหน?
ฉันได้รับมาจากคลาสผู้ใช้ฟังก์ชันนี้
และนี่มีประสิทธิภาพมากจริงๆ เพราะตอนนี้ฉันสามารถขยายวิซาร์ดของฉันได้
ถูกต้อง.
สมมุติว่าวิซาร์ดนี้มีจุดเริ่มต้น
วิธี.
ซึ่งจะทำงานเมื่อมีการสร้างวิซาร์ด
และเราจะมี
ชื่อ.
และพลังที่เราได้รับ
และในที่นี้เราจะกำหนดชื่อตัวเองให้เป็นชื่อที่เท่ากัน จากนั้นให้พลังจุดตัวเองเป็นกำลังเท่ากัน
และขอเพิ่มอีกวิธี
เรียกว่าจู่โจม
และวิธีการโจมตีนี้จะพิมพ์สตริง F ที่จะบอกว่า
โจมตีด้วย.
พลังของ
สมมติว่ากำลังตนเอง
แล้วเราก็จะทำเช่นเดียวกันกับอาร์เชอร์
ดังนั้นฉันจะคัดลอกรหัสนี้
แปะไว้ตรงนี้
และนักธนูจะมีชื่อ
สมมุติว่าแทนที่จะใช้กำลัง เราจะบอกว่ามี สมมุติว่า
จำนวนลูกศร
และจำนวนลูกศร
จะเป็นแอตทริบิวต์ใหม่ที่ได้รับ
แล้วการโจมตีก็จะดีด้วยการโจมตีด้วยลูกศร
แล้วเราจะมีลูกศรเหลืออยู่
ลูกศรซ้ายบอกจำนวนลูกศรและเราสามารถทำบางสิ่งที่สนุกได้โดยที่ลูกศรลดลงทุกครั้งที่คุณโจมตี
ตกลง.
ตอนนี้เรามีสิ่งนี้แล้ว ลองทำมันให้เล็กลงหน่อย เพื่อให้คุณเห็น
ไปเลย
เมื่อได้สิ่งนี้แล้ว เรามาสร้างตัวอย่างวิซาร์ดแรกกัน
กับ.
สมมุติว่าเมอร์ลิน กำลัง 50
แล้วก็นักธนู
เราจะยกตัวอย่าง
อย่างที่โรบินใช้ สมมุติว่าลูกธนู 500 ลูกหรือทำลูกธนู 100 ลูกกัน
ตอนนี้พ่อมดและนักธนูกำลังจะมี
พวกเขาจะได้ลงชื่อเข้าใช้
แต่พวกเขาจะโจมตีด้วย แต่มีเอกลักษณ์เฉพาะตัว
ชั้นเรียน
และยังมีคุณสมบัติที่แตกต่างกันอีกด้วย
มาดูกันเลย
ถ้าฉันจะทำ Wizard Dot
นาย. วิซาร์ด.
จุดหนึ่ง.
ตอนนี้เราจะบอกว่า
จู่โจม.
และให้ฉันหันหลังกลับไป
รหัสปัญญาของฉัน
เราจะเห็นว่าเรามีข้อผิดพลาดเล็กน้อย
ที่นี่.
อะไรเอ่ย.
ไม่ได้กำหนดชื่อตัวเองและนั่นเป็นเพราะฉันลืมตัวเองในวงเล็บ ดังนั้นคุณจำได้ว่าเราต้องให้พารามิเตอร์ตัวเองตัวแรกเสมอ
ถ้าเราเลื่อนลงมาเราจะไปที่ Wizard Dot เราจะเห็นว่าเรามีชื่อ พลัง และการโจมตี
ถ้าฉันคลิกโจมตีที่นี่และฉันเรียกใช้
เห็นว่าฉันกำลังโจมตีด้วยพลัง 50
ถ้าฉันทำ ให้ยิงธนูโจมตีจุดเดียว
ในกรณีนี้ ฉันจะโจมตีด้วยธนู
ลูกศรซ้าย 100.
แต่ทั้งสองอย่างนี้มีฟังก์ชันการลงชื่อเข้าใช้พร้อมกัน
มันเจ๋งแค่ไหน?
นี่คือพลังแห่งการสืบทอด
เรากำลังทำให้รหัสของเราแห้งใช่ไหม
เรากำลังแยกส่วนของรหัสที่พวกเขาทั้งสองแบ่งปันออกไป แต่จากนั้นก็เปลี่ยนสิ่งต่าง ๆ ตามความต้องการของแต่ละคน
ตัวอย่างเช่น ฉันสามารถมีวิธีการและคุณสมบัติต่างๆ บนวิซาร์ดที่แตกต่างจาก Archer แต่ยังมีฟังก์ชันผู้ใช้ของผู้ใช้ที่ใช้ร่วมกันอีกด้วย
และวิธีนี้ช่วยให้โค้ดของเรามีระเบียบและสะอาดอยู่เสมอ
คราวนี้ลองนำการซูมกลับมาเพื่อให้คุณเห็นได้ชัดเจน
ทีนี้ แนวคิดเรื่องมรดกนี้ทรงพลังจริงๆ
และที่สำคัญที่นี่คือเรามีชั้นเรียนหลักและชั้นเรียนลูก
ตอนนี้ บางครั้งคลาสย่อยเหล่านี้ถูกเรียกว่าคลาสย่อยหรือคลาสที่ได้รับ เนื่องจากเป็นคลาสย่อยของผู้ใช้หรือได้มาจากคลาสผู้ใช้
มาสำรวจหัวข้อนี้กันอีกสักหน่อยในวิดีโอหน้า