ประเภทของมรดกใน Python | Python Inheritance [พร้อมตัวอย่าง]

เผยแพร่แล้ว: 2021-02-09

สารบัญ

บทนำ

การต่อสู้เพื่อรหัสที่สะอาดเป็นการต่อสู้ที่โปรแกรมเมอร์ทุกคนเข้าร่วม และการต่อสู้นั้นสามารถเอาชนะได้ด้วยชุดเกราะที่เหมาะสมของแนวคิดการเขียนโปรแกรมเชิงวัตถุ และการใช้แนวคิด OOP อย่างเหมาะสมช่วยให้เราปรับปรุงความสามารถในการใช้ซ้ำของโค้ด ความสามารถในการอ่าน เวลาที่เหมาะสม และความซับซ้อนของพื้นที่

การเข้ารหัสใน Python นั้นสนุกมาก มีการสนับสนุนไลบรารีจำนวนมาก, เชิงวัตถุ, ความสามารถในการตั้งโปรแกรม GUI ทำให้เป็นเค้กร้อนในบรรดาภาษาการเขียนโปรแกรมทั้งหมด

การสืบทอดเป็นหนึ่งในคุณสมบัติเชิงวัตถุที่ใช้มากที่สุดและการนำไปใช้ในหลามเป็นงานที่กระตือรือร้น มาเริ่มกันเลยดีกว่า!

อันดับแรก เรามาทำความเข้าใจความหมายของมรดกกันก่อน

มรดก

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

การสืบทอดถูกจัดประเภทตามลำดับชั้นที่ตามมา และจำนวนของคลาสพาเรนต์และคลาสย่อยที่เกี่ยวข้อง

มรดกมีห้าประเภท:

  1. มรดกเดี่ยว
  2. มรดกหลายอย่าง
  3. มรดกหลายระดับ
  4. การสืบทอดตามลำดับชั้น
  5. มรดกไฮบริด

มรดกเดี่ยว

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

#ชั้นผู้ปกครอง
คลาส ด้านบน :
ผม = 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. ตัวแก้ไขการเข้าถึงส่วนตัว - ตัวแก้ไขการเข้าถึงส่วนตัวเป็นตัวระบุการเข้าถึงที่ปลอดภัยที่สุด สมาชิกส่วนตัวสามารถเข้าถึงได้เฉพาะภายในคลาสที่กำหนดไว้เท่านั้น