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

ตัวแปรคลาสทำงานอย่างไรในคลาส Python ที่สืบทอดหลายตัว


คลาสสามารถได้รับมาจากคลาสพื้นฐานมากกว่าหนึ่งคลาสใน Python สิ่งนี้เรียกว่าการสืบทอดหลายรายการ

ในการสืบทอดหลายรายการ คุณลักษณะของคลาสพื้นฐานทั้งหมดจะสืบทอดไปยังคลาสที่ได้รับ ไวยากรณ์สำหรับการสืบทอดหลายรายการคล้ายกับการสืบทอดเดี่ยว

class Super1:
    pass
class Super2:
    pass
class MultiDerived(Super1, Super2):
   pass

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

ในตัวอย่างข้างต้นของคลาส MultiDerived ลำดับการค้นหาคือ [MultiDerived, Super1, Super2, object] ลำดับนี้เรียกอีกอย่างว่าการทำให้เป็นเส้นตรงของคลาส MultiDerived และชุดของกฎที่ใช้เพื่อค้นหาลำดับนี้เรียกว่า Method Resolution Order (MRO)

MRO ช่วยให้มั่นใจว่าคลาสจะปรากฏก่อนผู้ปกครองเสมอ และในกรณีที่มีผู้ปกครองหลายคน ลำดับจะเหมือนกับทูเพิลของคลาสพื้นฐาน

MRO ของคลาสสามารถดูเป็นแอตทริบิวต์ __mro__ หรือเมธอด mro() ค่าแรกกลับค่า tuple ในขณะที่ตัวหลังจะคืนค่ารายการ

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Super1'>,
 <class '__main__.Super2'>,
 <class 'object'>]