Skip to content

Python | Abstract Class และ Interface

ภาษาโปรแกรมคอมพิวเตอร์ที่เราคุ้นเคยในปัจจุบันอาจจะมีแค่ไม่กี่ภาษา แต่ความจริงแล้วมีเป็น 100 ภาษาเลยนะครับ แต่ละภาษาถูกสร้างขึ้นให้ทำงานเฉพาะทางและเพื่อแก้ปัญหาบางอย่างเท่านั้น ภาษาไหนที่ถูกออกแบบมาให้ใช้แบบ general purpose หรือเป็นที่นิยมเราจะได้ยินชื่อบ่อยหน่อย เช่น C/C++, Java, C#, Python, Ruby, JavaScript, Go etc.

Design pattern ก็เช่นเดียวกัน คนเขียนโปรแกรมโดยทั่วไปคงคุ้นเคยกับ OOP (Object-Oriented Programming) มากหน่อยเพราะเป็นที่นิยมและมีการเรียนการสอนในสาขาที่เกี่ยวกับการเขียนโปรแกรม ภาษาที่ถูกใช้ในการเรียนการสอน OOP ก็เช่น Java, C++, C# ส่วนภาษาอื่นๆ อาจจะไม่มีฟีเจอร์แบบ OOP  เลยหรือมีแค่บางส่วน Python เองก็เหมือนกันในตอนแรกก็ใช้งานได้แค่ Class แต่ไม่มี Interface และ Abstract จนมาถึง Python >= 2.6 ถึงมี  ABC (Abstract Base Class) [Python 3.5, Python 2.7] ให้ใช้

Python นั้นเป็นภาษาที่ใช้แนวคิด Duck-typing เยอะมาก (ภาษาอื่นก็ implement เป็น Duck-typing ได้นะ) ที่เรียกอย่างนี้ก็เพราะว่า Python ไม่ได้สนใจ object เป็น  instance ของ class อะไร ขอให้มี method เหมือนกันก็เป็นอันใช้ได้ เช่น class เป็ดมี method ร้องก้าบๆ ถ้า class คนมี method ร้องก้าบๆ เหมือนกันแสดงว่าคนก็คือเป็ด (แบบนี้ก็ได้เหรอ) ดูตัวอย่างโค้ดข้างล่างนี้

ถึงแม้จะมี ABC ให้ใช้แต่ก็ไม่มี interface อยู่ดี ซึ่งก็ไม่ใช่เรื่องซีเรียสอะไรเพราะสามารถใช้แทนกันได้ ตามโค้ดข้างล่างนี้ (รายละเอียดปลีกย่อยของ interface และ abstract แนะนำให้ไปดูภาษาพวก OOP จ๋าอย่าง Java, C# ครับ)

อธิบายโค้ดสักหน่อย notation @abstractmethod เหนือ function เป็นการแบบว่า function ข้างล่างนี้เป็น abstract method และถ้าไม่มีการ override greet() method ก็จะ raise NotImplementedError()

ทีนี้ก็สามารถใช้งาน Python ได้ใกล้เคียง (ขึ้นมาอีกนิดนึง) กับภาษา OOP ทั่วไปได้แล้ว

Be First to Comment

Leave a Reply

Your email address will not be published.