เรียนเขียนโปรแกรมง่ายๆกับ Expert Programming Tutor วันนี้เราจะมาเข้าสู่บท Inherritance
การสืบทอดทำให้เราสามารถกำหนดคลาสที่สืบทอดเมธอดและคุณสมบัติทั้งหมดจากคลาสอื่น
Parent class เป็นคลาสที่สืบทอดมาจากที่เรียกว่าชั้นฐาน
Child class เป็นคลาสที่สืบทอดจากคลาสอื่นหรือที่เรียกว่าคลาสที่ได้รับ
สร้างParent class
คลาสใด ๆ สามารถเป็นคลาสพาเรนต์ได้ดังนั้นไวยากรณ์จะเหมือนกับการสร้างคลาสอื่น ๆ 
ตัวอย่าง
สร้างคลาสชื่อ Person โดยมีคุณสมบัติชื่อและนามสกุลและวิธีการ printname
| 
			 class Person:  x = Person("John", "Doe")  | 
		
ผลลัพธ์
| 
			 John Doe  | 
		
สร้าง Child Class
ในการสร้างคลาสที่สืบทอดการทำงานจากคลาสอื่นให้ส่งคลาสพาเรนต์เป็นพารามิเตอร์เมื่อสร้างคลาสย่อย
ตัวอย่าง
สร้างคลาสที่ชื่อว่า Student ซึ่งจะสืบทอดคุณสมบัติและเมธอดจากคลาส Person
| 
			 class Person:   def welcome(self):  x = Student("Mike", "Olsen", 2019)  | 
		
ผลลัพธ์
| 
			 Welcome Mike Olsen to the class of 2019  | 
		
เพิ่มฟังก์ชั่น __init __ ()
จนถึงตอนนี้เราได้สร้างคลาสย่อยที่สืบทอดคุณสมบัติและเมธอดจากคลาสพาเรนต์ เราต้องการเพิ่มฟังก์ชัน __init __ () ให้กับคลาสย่อย (แทนที่จะเป็นpass)
หมายเหตุ: ฟังก์ชัน __init __ () จะถูกเรียกโดยอัตโนมัติทุกครั้งที่มีการใช้คลาสเพื่อสร้างอ๊อบเจคใหม่
ตัวอย่าง
เพิ่มฟังก์ชัน __init __ () ให้กับคลาสของนักเรียน
| 
			 class Student(Person):  | 
		
เมื่อนักเรียนเพิ่มฟังก์ชัน __init __ () คลาสย่อยจะไม่สืบทอดฟังก์ชัน __init __ () ของคลาสพาเรนต์อีกต่อไป
หมายเหตุ: ฟังก์ชัน __init __ () ของคลาสย่อยจะแทนที่การสืบทอดของฟังก์ชัน __init __ () ของคลาสพาเรนต์
หากต้องการเก็บข้อมูลของฟังก์ชัน __init __ () ของคลาสพาเรนต์ให้เพิ่มการเรียกไปยังฟังก์ชัน __init __ () ของคลาสพาเรนต์
ตัวอย่าง
| 
			 class Person:   def printname(self): class Student(Person): x = Student("Mike", "Olsen")  | 
		
ผลลัพธ์
| 
			 Mike Olsen  | 
		
ตอนนี้เราได้เพิ่มฟังก์ชัน __init __ () สำเร็จแล้วและยังคงสืบทอดของคลาสพาเรนต์และเราพร้อมที่จะเพิ่มฟังก์ชันการทำงานในฟังก์ชัน __init __ ()
ใช้ฟังก์ชั่น super ()
Python มีฟังก์ชั่น super () ที่จะทำให้คลาสย่อยสืบทอดเมธอดและคุณสมบัติทั้งหมดจากคลาสพาเรนต์
ตัวอย่าง
| 
			 class Person:   def printname(self): class Student(Person): x = Student("Mike", "Olsen")  | 
		
ผลลัพธ์
| 
			 2019  | 
		
ด้วยการใช้ฟังก์ชัน super () นักเรียนไม่จำเป็นต้องใช้ชื่อขององค์ประกอบหลักมันจะสืบทอดเมธอดและคุณสมบัติจากคลาสพาเรนต์โดยอัตโนมัติ
Add Properties
ตัวอย่าง
เพิ่มคุณสมบัติที่เรียกว่าgraduationyearในคลาสของStudent
| 
			 class Person:   def printname(self): class Student(Person): x = Student("Mike", "Olsen", 2019)  | 
		
ผลลัพธ์
| 
			 2019  | 
		
ในตัวอย่างด้านล่างปี 2019 ควรเป็นตัวแปรและส่งผ่านไปยังคลาสStudentเมื่อสร้างอ๊อบเจ็คStudent โดยเพิ่มพารามิเตอร์อื่นในฟังก์ชัน __init __ ()
ตัวอย่าง
เพิ่มพารามิเตอร์ปีค.ศ และผ่านปีที่ถูกต้องเมื่อสร้างอ๊อบเจ็ค
| 
			 class Person:   def printname(self): class Student(Person): x = Student("Mike", "Olsen", 2019)  | 
		
ผลลัพธ์
| 
			 2019  | 
		
Add Methods
ตัวอย่าง
เพิ่มวิธีการที่เรียกว่า welcome
| 
			 class Person:   def printname(self): class Student(Person):   def welcome(self): x = Student("Mike", "Olsen", 2019)  | 
		
ผลลัพธ์
| 
			 Welcome Mike Olsen to the class of 2019  | 
		
ถ้านักเรียนเพิ่มวิธีการในคลาสย่อยที่มีชื่อเดียวกันกับฟังก์ชั่นในคลาสพาเรนต์ การสืบทอดของวิธีการหลักจะเป็นการถูกแทนที่ เป็นอย่างไรกันบ้างครับ ในบทนี้อาจจะผิดพลาดเรื่องการเขียนพิมพืหรือลืมวงเล็บได้ ฉะนั้นจึงต้องระมัดระวังหน่อยนะครับ
แปลจากhttps://www.w3schools.com/python/python_inheritance.asp
Tag ที่น่าสนใจ: python inheritance parent_class child_class object-oriented_programming super()_function properties method_overriding
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC) 
    084-88-00-255 (AIS) 
    026-111-618 
    หรือทาง EMAIL:  NTPRINTF@GMAIL.COM