ประเภทของมรดกใน Python | Python Inheritance [พร้อมตัวอย่าง]
เผยแพร่แล้ว: 2021-02-09สารบัญ
บทนำ
การต่อสู้เพื่อรหัสที่สะอาดเป็นการต่อสู้ที่โปรแกรมเมอร์ทุกคนเข้าร่วม และการต่อสู้นั้นสามารถเอาชนะได้ด้วยชุดเกราะที่เหมาะสมของแนวคิดการเขียนโปรแกรมเชิงวัตถุ และการใช้แนวคิด OOP อย่างเหมาะสมช่วยให้เราปรับปรุงความสามารถในการใช้ซ้ำของโค้ด ความสามารถในการอ่าน เวลาที่เหมาะสม และความซับซ้อนของพื้นที่
การเข้ารหัสใน Python นั้นสนุกมาก มีการสนับสนุนไลบรารีจำนวนมาก, เชิงวัตถุ, ความสามารถในการตั้งโปรแกรม GUI ทำให้เป็นเค้กร้อนในบรรดาภาษาการเขียนโปรแกรมทั้งหมด
การสืบทอดเป็นหนึ่งในคุณสมบัติเชิงวัตถุที่ใช้มากที่สุดและการนำไปใช้ในหลามเป็นงานที่กระตือรือร้น มาเริ่มกันเลยดีกว่า!
อันดับแรก เรามาทำความเข้าใจความหมายของมรดกกันก่อน
มรดก
การสืบทอดเป็นกระบวนการในการได้มาซึ่งคุณสมบัติและคุณลักษณะ (ตัวแปรและเมธอด) ของคลาสอื่น ในลำดับชั้นนี้ คลาสที่สืบทอดคลาสอื่นเรียกว่าคลาสย่อยหรือคลาสย่อย และคลาสอื่นคือคลาสพาเรนต์
การสืบทอดถูกจัดประเภทตามลำดับชั้นที่ตามมา และจำนวนของคลาสพาเรนต์และคลาสย่อยที่เกี่ยวข้อง
มรดกมีห้าประเภท:
- มรดกเดี่ยว
- มรดกหลายอย่าง
- มรดกหลายระดับ
- การสืบทอดตามลำดับชั้น
- มรดกไฮบริด
มรดกเดี่ยว
การสืบทอดประเภทนี้ทำให้คลาสย่อยหรือคลาสที่ได้รับสืบทอดคุณสมบัติและคุณสมบัติของคลาสพาเรนต์ ซึ่งจะช่วยหลีกเลี่ยงความซ้ำซ้อนของโค้ดและปรับปรุงความสามารถในการนำโค้ดกลับมาใช้ใหม่ได้
#ชั้นผู้ปกครอง คลาส ด้านบน : ผม = 5 def fun1 (ตัวเอง): พิมพ์( “เฮ้ คุณอยู่ในชั้นเรียนผู้ปกครอง” ) #คลาสย่อย คลาส ด้านล่าง (ด้านบน): ผม= 10 def fun2 (ตัวเอง): พิมพ์( “เฮ้ คุณอยู่ในคลาสย่อย” ) temp1=ด้านล่าง() temp2=เหนือ() temp1.fun1() temp1.fun2() temp2.fun1() พิมพ์ (temp1.i) พิมพ์ (temp2.i) #temp2.fun2() |
เอาล่ะ มาดูโค้ดด้านบนกัน
ในโค้ดด้านบน "Above" คือคลาสพาเรนต์และ "ด้านล่าง" คือคลาสย่อยที่สืบทอดคลาสพาเรนต์ การใช้ inheritance ใน python เป็นเรื่องง่าย เราแค่ต้องพูดถึงชื่อ parent class ในวงเล็บของคลาสลูก เรากำลังสร้างอ็อบเจ็กต์ของทั้ง parent class และ child class และนี่คือจุดที่น่าสนใจเกี่ยวกับการสืบทอด คลาสลูกสามารถเข้าถึงเมธอดและตัวแปรของคลาสพาเรนต์ได้ ในขณะที่ในทางกลับกันไม่เป็นความจริง
ดังนั้นในโค้ดข้างต้น วัตถุ temp1 สามารถเข้าถึงทั้งวิธี fun1 และ fun2 ในขณะที่วัตถุ temp2 สามารถเข้าถึงได้เฉพาะวิธี fun1 ในทำนองเดียวกัน กฎเดียวกันนี้ใช้กับตัวแปรในโค้ด และการเข้าถึงเมธอดคลาสลูกหรือตัวแปรจากอ็อบเจ็กต์คลาสพาเรนต์จะทำให้เกิดข้อผิดพลาด หากบรรทัดสุดท้ายในโค้ดไม่มีความคิดเห็น จะทำให้เกิดข้อผิดพลาด
มรดกหลายอย่าง
การสืบทอดนี้ทำให้คลาสย่อยสามารถสืบทอดจากคลาสพาเรนต์มากกว่าหนึ่งคลาส การสืบทอดประเภทนี้ไม่ได้รับการสนับสนุนโดยคลาส java แต่ python รองรับการสืบทอดประเภทนี้ มีข้อได้เปรียบอย่างมากหากเราต้องการรวบรวมคุณลักษณะหลายอย่างจากคลาสต่างๆ
#ผู้ปกครองชั้น1 คลาส เอ : demo1= 0 def fun1 (ตัวเอง): พิมพ์ (self.demo1) #ผู้ปกครองชั้น2 คลาส บี : demo2= 0 def fun2 (ตัวเอง): พิมพ์ (self.demo2) #คลาสเด็ก คลาส C (A, B): def fun3 (ตัวเอง): พิมพ์( “เฮ้ คุณอยู่ในชั้นเรียนเด็ก” ) #รหัสหลัก ค = ค() c.demo1 = 10 c.demo2 = 5 c.fun3() พิมพ์ ( “หมายเลขแรกคือ:“ ,c.demo1) พิมพ์ ( “หมายเลขที่สองคือ:“ ,c.demo2) |
ในโค้ดด้านบนนี้ เราได้สร้างพาเรนต์คลาสสองคลาส “A”, “B” ตามไวยากรณ์ของการสืบทอดใน python เราได้สร้างคลาสย่อยซึ่งสืบทอดทั้งคลาส "A" และ "B" ตามที่กล่าวไว้ก่อนหน้านี้ว่าคลาสลูกสามารถเข้าถึงเมธอดและตัวแปรของคลาสพาเรนต์ คลาสลูก “C” สามารถเข้าถึงเมธอดของคลาสพาเรนต์ได้
มรดกหลายระดับ
ในการสืบทอดหลายระดับ การถ่ายโอนคุณสมบัติของคุณสมบัติจะทำได้มากกว่าหนึ่งคลาสตามลำดับชั้น เพื่อให้ได้ภาพที่ดีขึ้น เราสามารถพิจารณาว่าเป็นความสัมพันธ์แบบบรรพบุรุษกับลูกหลานหรือรากต่อใบในต้นไม้ที่มีมากกว่าหนึ่งระดับ
#ผู้ปกครองชั้น1 รถ คลาส : def ทำงาน (ตัวเอง): พิมพ์ ( “ยานพาหนะใช้สำหรับการขนส่ง” ) #เด็กป.1 รถ คลาส (ยานพาหนะ): ล้อ def (ตัวเอง): พิมพ์( “รถมี4ล้อ” ) #เด็กป.2 คลาส electric_car (รถยนต์): def พิเศษ (ตัวเอง): พิมพ์( “รถยนต์ไฟฟ้าใช้ไฟฟ้า” ) ไฟฟ้า=ไฟฟ้า_car() ไฟฟ้า.speciality() ไฟฟ้า. ล้อ () ไฟฟ้าทำงาน () |
เมื่อพิจารณาจากโค้ดข้างต้นแล้ว เราได้สร้าง "รถ" ของคลาส จากนั้นเราจึงได้สร้างรถคลาสที่สืบทอดคลาสรถ ตอนนี้ "รถยนต์" เป็นคลาสหลักและ "รถยนต์" เป็นคลาสย่อย ภายหลังเราได้สร้างคลาส "electric_car" แล้ว ตอนนี้คลาสรถเป็นคลาสหลัก และคลาส electric_car เป็นคลาสย่อย และความสัมพันธ์ระหว่างคลาสรถและคลาส electric_car คือการสืบทอดหลายระดับ
ที่นี่คลาส electric_car สามารถเข้าถึงเมธอด ตัวแปรของทั้งรถและคลาสรถ ในขณะที่คลาสรถสามารถเข้าถึงได้เฉพาะเมธอด ตัวแปรของคลาสรถ และตามที่กล่าวไว้ รถยนต์ระดับผู้ปกครองไม่สามารถเข้าถึงวิธีการใด ๆ ของคลาสย่อยได้
การสืบทอดตามลำดับชั้น
การสืบทอดนี้อนุญาตให้คลาสโฮสต์เป็นคลาสพาเรนต์สำหรับคลาสย่อยหรือคลาสย่อยมากกว่าหนึ่งคลาส สิ่งนี้มีประโยชน์ในการแบ่งปันการทำงานของเมธอดกับคลาสย่อยหลายคลาส ดังนั้นจึงเลี่ยงการซ้ำซ้อนของโค้ด
#ชั้นผู้ปกครอง ผู้ปกครอง ชั้นเรียน : def fun1 (ตัวเอง): พิมพ์( “เฮ้ คุณอยู่ในชั้นเรียนผู้ปกครอง” ) #เด็กป.1 คลาส child1 (ผู้ปกครอง): def fun2 (ตัวเอง): พิมพ์( “เฮ้ คุณอยู่ชั้นเด็ก 1” ) #เด็กป.2 คลาส child2 (ผู้ปกครอง): def fun3 (ตัวเอง): พิมพ์( “เฮ้ คุณอยู่ชั้นเด็ก 2” ) #เด็กป.3 คลาส child3 (ผู้ปกครอง): def fun4 (ตัวเอง): พิมพ์( “เฮ้ คุณอยู่ในเด็กคลาส 3” ) #โปรแกรมหลัก child_obj1 = เด็ก 3() child_obj2 = เด็ก 2 () child_obj3 = เด็ก 1 () child_obj1.fun1() child_obj1.fun4() child_obj2.fun1() child_obj2.fun3() child_obj3.fun1() child_obj3.fun2() |
ในโค้ดด้านบนนี้ เรามีคลาสพาเรนต์เดี่ยวและคลาสย่อยหลายคลาสที่สืบทอดคลาสพาเรนต์เดียวกัน ตอนนี้คลาสย่อยทั้งหมดสามารถเข้าถึงเมธอดและตัวแปรของคลาสพาเรนต์ได้ เราได้สร้างคลาส "Parent" และคลาสย่อย 3 คลาส "child1", "child2", "child3" ซึ่งสืบทอดคลาสพาเรนต์เดียวกัน "Parent"
ชำระเงิน: แนวคิดโครงการโอเพ่นซอร์สของ Python
มรดกไฮบริด
มรดกกล่าวว่าการสืบทอดแบบไฮบริดหากมีการใช้งานการสืบทอดมากกว่าหนึ่งประเภทในรหัสเดียวกัน คุณลักษณะนี้ช่วยให้ผู้ใช้สามารถใช้คุณลักษณะของการสืบทอดได้ดีที่สุด ซึ่งเป็นไปตามข้อกำหนดของการนำโค้ดไปใช้งานที่จำเป็นต้องมีการสืบทอดหลายรายการในการใช้งาน
คลาส A: def fun1(ตัวเอง): print("เฮ้ คุณอยู่คลาส A") คลาส B(A): def fun2(ตัวเอง): print("เฮ้ คุณอยู่คลาส B") คลาส C(A): def fun3 (ตัวเอง): print("เฮ้ คุณอยู่คลาส C") คลาส D(C,A): #line 13 def fun4(ตัวเอง): print("เฮ้ เธออยู่คลาส D")#โปรแกรมหลัก อ้างอิง = D() ref.fun4() ref.fun3() ref.fun1() |
ในโค้ดด้านบนนี้ เราจะเห็นได้ว่าเราใช้การสืบทอดมากกว่าหนึ่งประเภท คลาส A, B, C ใช้การสืบทอดแบบลำดับชั้น และคลาส A, C, D ใช้การสืบทอดหลายระดับ ไม่มีมรดกส่วนบุคคลเหล่านั้นมีคุณสมบัติเฉพาะในการเข้าถึงเมธอดและตัวแปรของคลาสพาเรนต์ นอกจากนี้ยังมีประเด็นที่ต้องสังเกต
เมื่อเราใช้การสืบทอดหลายระดับ เราจะปฏิบัติตามไวยากรณ์เช่น “child_class(parent_class1, parent_class2)” แต่ไวยากรณ์นี้จะเกิดข้อผิดพลาดหาก “parent_class1” อยู่เหนือ “parent_class2” ตามลำดับชั้น หากเราต้องการใช้ไวยากรณ์นี้ "parent_class1" จะต้องอยู่ในระดับที่ต่ำกว่า "parent_class2" ตามลำดับชั้น ตัวอย่างเช่น ในโค้ดด้านบน หากบรรทัดที่ 13 มีคลาสไวยากรณ์ D(A, C) โค้ดจะไม่ทำงานเนื่องจากคลาส C นั้นต่ำกว่าคลาส A ตามลำดับชั้น
เรียนรู้ หลักสูตรวิทยาศาสตร์ข้อมูล จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
อ่าน: แนวคิดและหัวข้อโครงการ Python
บทสรุป
เราได้ผ่านการใช้งานและความต้องการของมรดกและเข้าใจความหมายของมรดก นอกจากนี้เรายังได้ศึกษาประเภทของการสืบทอดและดำเนินการเกี่ยวกับรหัสการใช้งานและคำอธิบายของการสืบทอดแต่ละประเภท เข้าใจกฎของตัวแปรและวิธีการเข้าถึงมรดกประเภทต่างๆ
เมื่อคุณทราบประเภทของการสืบทอดประเภทต่างๆ ในไพ ธ อนแล้ว ให้ลองนำไปใช้และลองใช้มันในโค้ดของคุณ ลองปรับโค้ดของคุณให้เหมาะสมโดยใช้การสืบทอดอย่างเหมาะสม
หากคุณอยากเรียนรู้เกี่ยวกับวิทยาศาสตร์ข้อมูล ให้ลองดูประกาศนียบัตร PG ด้านวิทยาศาสตร์ข้อมูลของ IIIT-B และ upGrad ซึ่งสร้างขึ้นสำหรับมืออาชีพด้านการทำงานและเสนอกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติจริง การให้คำปรึกษากับผู้เชี่ยวชาญในอุตสาหกรรม 1- on-1 กับที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ
อะไรคือความแตกต่างระหว่างการสืบทอดหลายรายการและการสืบทอดหลายระดับ?
โปรแกรมเมอร์มือใหม่หลายคนมักจะสับสนระหว่างการสืบทอดหลายรายการและการสืบทอดหลายระดับ ข้อมูลต่อไปนี้แสดงให้เห็นความแตกต่างที่มีนัยสำคัญบางประการระหว่างมรดกทั้งสองประเภทนี้
มรดกหลายรายการ -
1. เมื่อคลาสย่อยสืบทอดคุณสมบัติและคุณลักษณะจากคลาสฐานมากกว่าหนึ่งคลาส การสืบทอดประเภทนี้เรียกว่า Multiple Inheritance
2. ไม่ได้ใช้กันอย่างแพร่หลายเนื่องจากการสืบทอดพหุคูณสามารถเข้าใจได้ค่อนข้างซับซ้อน
3. มีเพียงสองระดับชั้น: คลาสพื้นฐานและคลาสที่ได้รับ
มรดกหลายระดับ
1. การสืบทอดซึ่งคลาสย่อยสืบทอดคุณสมบัติจากคลาสพื้นฐานซึ่งสืบทอดคุณสมบัติเพิ่มเติมจากคลาสฐานอื่น ทำให้คลาสย่อยเดิมเรียกว่า Multilevel Inheritance
2. มรดกนี้มีจุดประสงค์ที่ดีและมีการใช้กันอย่างแพร่หลายมาก
3. มีอย่างน้อยสามระดับคลาส: คลาสพื้นฐาน คลาสกลาง และคลาสที่ได้รับ
คุณเข้าใจอะไรเกี่ยวกับมรดกไฮบริด?
Hybrid Inheritance เป็นมรดกประเภทหนึ่งที่ไม่เหมือนใคร แทนที่จะมีแนวคิดใหม่ ตามชื่อของมันบ่งบอกว่าเป็นมรดกตั้งแต่สองประเภทขึ้นไป ตัวอย่างเช่น คลาสที่แสดงการสืบทอดทั้งแบบหลายระดับและแบบหลายระดับเป็นตัวอย่างของการสืบทอดแบบไฮบริด
คุณรู้อะไรเกี่ยวกับตัวแก้ไขการเข้าถึงใน Python
ใน Python มีตัวแก้ไขการเข้าถึง 3 ประเภทที่กล่าวถึงด้านล่าง:
1. Public Access Modifier - สมาชิกสาธารณะของชั้นเรียนสามารถเข้าถึงได้โดยส่วนใดส่วนหนึ่งของโปรแกรม ใน Python หากไม่ได้ระบุตัวระบุการเข้าถึงของสมาชิกข้อมูลหรือฟังก์ชันของสมาชิก จะเป็นสาธารณะโดยค่าเริ่มต้น
2. Protected Access Modifier - หากสมาชิกข้อมูลหรือฟังก์ชันของสมาชิกถูกกำหนดให้ได้รับการคุ้มครอง ก็จะสามารถเข้าถึงได้โดยคลาสที่ได้รับของคลาสนั้นเท่านั้น
3. ตัวแก้ไขการเข้าถึงส่วนตัว - ตัวแก้ไขการเข้าถึงส่วนตัวเป็นตัวระบุการเข้าถึงที่ปลอดภัยที่สุด สมาชิกส่วนตัวสามารถเข้าถึงได้เฉพาะภายในคลาสที่กำหนดไว้เท่านั้น