Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การสืบทอดคลาส (Class Inheritance) ใน Python

แทนที่จะเริ่มจากศูนย์ คุณสามารถสร้างคลาสโดยการสืบทอดจากคลาสที่มีอยู่แล้ว โดยการระบุคลาสพาเรนต์ในวงเล็บหลังชื่อคลาสใหม่

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

ไวยากรณ์ (Syntax)

คลาสที่สืบทอด (Derived classes) ประกาศคล้ายคลาสพาเรนต์ แต่จะระบุลิสต์ของคลาสฐานที่จะสืบทอดหลังชื่อคลาส:

class SubClassName (ParentClass1[, ParentClass2, ...]):
    'Optional class documentation string'
    class_suite

ตัวอย่าง

#!/usr/bin/python
class Parent: # กำหนดคลาสพาเรนต์
    parentAttr = 100
    def __init__(self):
        print "Calling parent constructor"
    def parentMethod(self):
        print 'Calling parent method'
    def setAttr(self, attr):
        Parent.parentAttr = attr
    def getAttr(self):
        print "Parent attribute :", Parent.parentAttr

class Child(Parent): # กำหนดคลาสลูก
    def __init__(self):
        print "Calling child constructor"
    def childMethod(self):
        print 'Calling child method'

c = Child() # instance ของลูก
c.childMethod() # ลูกเรียกเมธอดของตัวเอง
c.parentMethod() # เรียกเมธอดของพาเรนต์
c.setAttr(200) # เรียกเมธอดพาเรนต์อีกครั้ง
c.getAttr() # เรียกเมธอดพาเรนต์อีกครั้ง

ผลลัพธ์ (Output)

เมื่อรันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้:

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

เช่นเดียวกัน คุณสามารถสืบทอดคลาสจากหลายคลาสพาเรนต์ได้ดังนี้:

class A: # กำหนดคลาส A .....
class B: # กำหนดคลาส B .....
class C(A, B): # subclass ของ A และ B .....

คุณสามารถใช้ฟังก์ชัน issubclass() หรือ isinstance() เพื่อตรวจสอบความสัมพันธ์ของคลาสสองคลาสและอินสแตนซ์

  • issubclass(sub, sup) ฟังก์ชันบูลีนคืนค่า true หาก subclass ที่กำหนด sub เป็น subclass จริงของ superclass sup
  • isinstance(obj, Class) ฟังก์ชันบูลีนคืนค่า true หาก obj เป็น instance ของคลาส Class หรือเป็น instance ของ subclass ของ Class