เรียนเขียนโปรแกรมง่ายๆกับ 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