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

การสืบทอดคลาสใน Python


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

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

ไวยากรณ์

คลาสที่ได้รับจะถูกประกาศเหมือนกับคลาสพาเรนต์ อย่างไรก็ตาม รายการของคลาสพื้นฐานที่จะสืบทอดมาจากชื่อคลาส -

คลาส SubClassName (ParentClass1[, ParentClass2, ...]):'ตัวเลือกเอกสารคลาสเสริม string'class_suite

ตัวอย่าง

#!/usr/bin/pythonclass Parent:# define parent class 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 (ตัวเอง):พิมพ์ "Parent คุณลักษณะ:", Parent.parentAttrclass Child (Parent):# กำหนดคลาสย่อย def __init__ (ตัวเอง):พิมพ์ "Calling child constructor" def childMethod(self):พิมพ์ 'Calling child method'c =Child() # อินสแตนซ์ของ childc.childMethod() # child เรียก methodc.parentMethod() # เรียก methodc.setAttr(200) ของ parent # เรียก methodc.getAttr() ของ parent อีกครั้ง # เรียก parent's อีกครั้ง วิธีการ

ผลลัพธ์

เมื่อโค้ดด้านบนถูกรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

Calling child constructorCalling child methodCalling parent methodParent คุณลักษณะ :200

ในทำนองเดียวกัน คุณสามารถขับคลาสจากคลาสพาเรนต์หลายคลาสได้ดังนี้ -

คลาส A:# กำหนดคลาสของคุณ A.....คลาส B:# กำหนดคลาสของคุณ B.....คลาส C(A, B):# คลาสย่อยของ A และ B..... 

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

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