แทนที่จะเริ่มจากศูนย์ คุณสามารถสร้างคลาสโดยการสืบทอดจากคลาสที่มีอยู่แล้ว โดยการระบุคลาสพาเรนต์ในวงเล็บหลังชื่อคลาสใหม่
คลาสลูกสืบทอดแอตทริบิวต์ของคลาสพาเรนต์ และคุณสามารถใช้แอตทริบิวต์เหล่านั้นได้เหมือนถูกกำหนดในคลาสลูก คลาสลูกยังสามารถโอเวอร์ไรด์สมาชิกข้อมูลและเมธอดจากพาเรนต์ได้อีกด้วย
ไวยากรณ์ (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