python: บันทึกเรื่องคลาส

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

การอ้างถึงคลาสแม่ในไพธอน จะอ้างถึงแบบตรง ๆ เช่น

>>> class X:
...   def __init__(self):
...   print "print from class X"
... 
>>> class Y(X):
...   def __init__(self):
...     X.__init__(self)
...     print "print from class Y"
... 
>>> y = Y()
print from class X
print from class Y
>>> 

หรือ

>>> class Y(X):
...   def __init__(self):
...     self.__parent = X
...     self.__parent.__init__(self)
...     print "print from class Y"
... 

แบบหลังจะมีประโยชน์ในการเรียกใช้คลาสแม่จากเมธอดอื่นในคลาสนั้น ๆ

ถ้าเป็นการสืบทอดคลาสเพียงชั้นเดียว สามารถใช้พรอพเพอร์ตี้ __class__ และ __bases__ คือ

    self.__parent = self.__class__.__bases__[0]

แต่พอสืบทอดกันเกินหนึ่งชั้นแล้ว การทำงานจะตีกันมั่ว