การสืบทอดใน Python | Python Inheritance [พร้อมตัวอย่าง]

เผยแพร่แล้ว: 2020-12-14

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

หากคุณวางแผนสำหรับอาชีพในฐานะนักพัฒนา Python คุณจะต้องมีผลตอบแทนที่สูงขึ้น เนื่องจาก เงินเดือนเฉลี่ย สำหรับนักพัฒนา Python อยู่ที่ประมาณ $119,082 ต่อปี แต่ก่อนที่คุณจะดำเนินการกับโปรแกรมการเรียนรู้ Python นี่คือสิ่งที่คุณควรทราบก่อน - การสืบทอดใน Python ตรวจสอบการรับรองด้านวิทยาศาสตร์ข้อมูลของเรา หากคุณต้องการได้รับความเชี่ยวชาญใน python และเครื่องมืออื่นๆ

มาเริ่มกันก่อนว่ามรดกใน Python คืออะไร?

สารบัญ

มรดกใน Python คืออะไร?

เช่นเดียวกับความสัมพันธ์แบบพ่อแม่และลูก การสืบทอดทำงานบนคลาสที่ได้รับซึ่งสัมพันธ์กับคลาสพื้นฐาน คลาส "Derived" ทุกคลาสจะสืบทอดมาจากคลาส "Base" การสืบทอดจะแสดงใน UML หรือ Unified Modeling Language เป็นภาษาการสร้างแบบจำลองมาตรฐานที่รวมชุดไดอะแกรมที่รวมเข้าด้วยกันเพื่อช่วยนักพัฒนาระบุ โครงสร้าง และจัดทำเอกสารองค์ประกอบของระบบซอฟต์แวร์

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

คำถามคือ คลาส "สิงโต" สืบทอดมาจาก "สัตว์" อย่างไร?

คลาส "สิงโต" สืบทอด

  • อินเตอร์เฟซ
  • การดำเนินการ

หมายเหตุ: คุณสามารถแทนที่อ็อบเจ็กต์ Derived Class ด้วยอ็อบเจ็กต์ Base Class ในแอปพลิเคชันที่เรียกว่า หลักการ ทดแทน Liskov แสดงว่าหากโปรแกรมคอมพิวเตอร์มีอ็อบเจ็กต์ P เป็นชนิดย่อยของ Q คุณสามารถแทนที่ P ด้วย Q ได้อย่างง่ายดายโดยไม่ต้องเปลี่ยนแปลงคุณสมบัติ

ชำระเงินด้วย: เงินเดือนนักพัฒนา Python ในอินเดีย

ข้อดีของการสืบทอดใน Python

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

ประเภทของมรดกใน Python

มรดกเดี่ยว

เราได้เห็นแล้วว่าการสืบทอดเดี่ยวคืออะไร - การสืบทอดของคลาส "สืบเนื่อง" จากคลาส "ฐาน" มาทำความเข้าใจกันด้วยตัวอย่าง

ระดับประเทศ:

def ShowCountry(ตัวเอง):

พิมพ์("นี่คือสเปน");

คลาสรัฐ(ประเทศ):

def ShowState (ตัวเอง):

พิมพ์("นี่คือรัฐ");

st = สถานะ ();

st.ShowCountry();

st.ShowState();

มรดกหลายระดับ

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

นี่คือตัวอย่างมรดกหลายระดับ

สัตว์ประจำชั้น:

def พูด (ตัวเอง):

พิมพ์("สัตว์พูด")

#น้องหมาคลาสเด็ก สืบทอดคลาสสัตว์พื้นฐาน

คลาส Dog(สัตว์):

def bark (ตัวเอง):

พิมพ์("สุนัขเห่า")

#ลูก Dogchild สืบทอดคลาสลูก Dog อีกชั้น

คลาส DogChild(สุนัข):

def กิน (ตัวเอง):

พิมพ์(“กินขนมปัง…”)

d = DogChild()

ง.เปลือก()

ง.พูด()

ง. กิน()

มรดกหลายอย่าง

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

ลองดูตัวอย่างสำหรับการสืบทอดหลายรายการ

การคำนวณระดับ 1:

สรุปผลรวม (ตัวเอง, ก, ข):

กลับ a+b;

การคำนวณระดับ 2:

def การคูณ (ตัวเอง, a, b):

ส่งคืน a*b;

คลาสที่ได้รับ(Calculation1,Calculation2):

def Divide(ตัวเอง,a,b):

กลับ a/b;

d = ได้มา ()

พิมพ์(ง.ผลรวม(10,20))

พิมพ์(ง.คูณ(10,20))

พิมพ์(ง.หาร(10,20))

ชำระเงิน: วิธีแปลงคำพูดเป็นข้อความด้วย Python

จะระบุ Derived Class ได้อย่างไร?

Python มาพร้อมกับฟังก์ชัน issubclass() ในตัวที่ช่วยให้นักพัฒนาตรวจสอบว่าคลาสนั้นเป็นคลาสที่ได้รับหรือคลาสฐาน เมื่อคุณเรียกใช้ฟังก์ชันนี้ ฟังก์ชันจะส่งคืนพร้อมผลลัพธ์ "True" สำหรับคลาสย่อยหรือคลาส Derived ขณะที่ False สำหรับคลาส Base

นักพัฒนาสามารถตรวจสอบชั้นเรียนผ่านตัวอย่างนี้

คลาส myAge:

อายุ = 36

คลาส myObj (myAge):

ชื่อ = “จอห์น”

อายุ = myAge

x = issubclass (myObj, myAge)

จะสร้างลำดับชั้นของคลาสใน Python ได้อย่างไร?

การสืบทอดใน Python ช่วยสร้างลำดับชั้นของคลาส คลาสที่เกี่ยวข้องทั้งหมดจะใช้อินเทอร์เฟซร่วมกันเพื่อสื่อสารระหว่างกัน คลาสฐานกำหนดอินเทอร์เฟซ คลาสที่ได้รับสามารถให้ความเชี่ยวชาญเฉพาะของอินเทอร์เฟซ ที่นี่ เรากำลังสำรวจโมเดล HR เพื่อแสดงลำดับชั้นของคลาส

ระบบ HR จะประมวลผลเงินเดือนสำหรับพนักงานในบริษัทต่างๆ ผู้ปฏิบัติงานแต่ละคนจะถูกระบุผ่าน ID และมีตำแหน่งการจ่ายเงินเดือนที่แตกต่างกันเพื่อคำนวณ

ขั้นแรกให้สร้างคลาสบัญชีเงินเดือนเป็นออบเจกต์ "ฐาน"

# ใน hr.py

ระบบบัญชีเงินเดือน:

def คำนวณ_payroll (ตัวเอง, คนงาน):

พิมพ์('การคำนวณเงินเดือน')

พิมพ์('===================')

สำหรับคนงานในคนงาน:

พิมพ์ (f'Payroll สำหรับ: {worker.id} – {worker.name}')

พิมพ์ (f'- ตรวจสอบจำนวนเงิน: {worker.calculate_payroll()}')

พิมพ์(")

PayrollSystem ดำเนินการ เมธอด .calculate_payroll() ที่รวบรวมข้อมูลของพนักงาน พิมพ์ id ชื่อ และตรวจสอบจำนวนเงินค่า จ้าง ตอนนี้ คุณเรียกใช้ ผู้ปฏิบัติงาน คลาสพื้นฐาน ที่จัดการกับอินเทอร์เฟซมาตรฐานสำหรับผู้ปฏิบัติงานทุกประเภท:

# ใน hr.py

คนงานในชั้นเรียน:

def __init__(ตัวเอง, id, ชื่อ):

self.id = id

self.name = ชื่อ

การสร้างคลาสพื้นฐานของผู้ปฏิบัติงานสำหรับผู้ปฏิบัติงานทุกประเภทในบริษัททำให้ลำดับชั้นง่ายขึ้นสำหรับระบบ HR ผู้ปฏิบัติงานทุกคนได้รับมอบหมายชื่อและรหัส ระบบ HR กำหนดให้พนักงานต้องให้ข้อมูลเกี่ยวกับเงินเดือนประจำสัปดาห์ผ่านอินเทอร์เฟซ .calculate_payroll() การดำเนินการของอินเทอร์เฟซนี้อาจแตกต่างกันไปตามประเภทของผู้ปฏิบัติงาน

ต้องอ่าน: คำถามสัมภาษณ์ Python

บทสรุป

ที่นี่ เราเรียนรู้ที่จะสร้างคลาส Python ต่างๆ สร้างความสัมพันธ์ระหว่างคลาสเหล่านั้น และแม้กระทั่งกำหนดลำดับชั้นของคลาส แต่การสืบทอดใน Python ไม่ได้จำกัดอยู่เพียงฟังก์ชันการทำงานที่กล่าวถึงที่นี่

การรับรองขั้นสูงในการเรียนรู้ของเครื่องและ AI : IIT madras ซึ่งเป็นหนึ่งในสถาบันการศึกษาที่ดีที่สุดของอินเดีย ได้ร่วมมือกับ upGrad เพื่อสร้างหลักสูตรขั้นสูงเกี่ยวกับการเรียนรู้ของเครื่องเพื่อให้บุคคลทั่วไปมีความรู้เกี่ยวกับการเรียนรู้ของเครื่องด้วยหลักสูตรนี้

หากคุณอยากเรียนรู้เกี่ยวกับวิทยาศาสตร์ข้อมูล ลองดู โปรแกรม Executive PG ของ IIIT-B & upGrad ใน Data Science ซึ่งสร้างขึ้นสำหรับมืออาชีพที่ทำงานและมีกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติจริง การให้คำปรึกษากับผู้เชี่ยวชาญในอุตสาหกรรม 1 -on-1 พร้อมที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

เหตุใดการสืบทอดจึงมีความสำคัญใน Python

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

การสืบทอดจำเป็นในขณะที่เรียนรู้ Python หรือไม่?

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

ใน Python ไม่รองรับการสืบทอดประเภทใด

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