Polymorphism ใน Python คืออะไร? ความแตกต่างอธิบายด้วยตัวอย่าง
เผยแพร่แล้ว: 2021-03-05สารบัญ
บทนำ
Python เป็นภาษาโปรแกรมระดับสูง ตีความ และโอเพนซอร์ส โปรแกรมเมอร์และนักพัฒนาหลายคนได้รับความสนใจเป็นอย่างมาก เนื่องจากสนับสนุนไลบรารีที่ช่วยในงานต่างๆ เช่น การวิเคราะห์ข้อมูลเชิงสำรวจ การเขียนโปรแกรม GUI เป็นต้น นอกจากนี้ การเขียนโปรแกรมใน python ก็น่าสนใจมาก
เราจะพูดถึงคุณสมบัติที่น่าสนใจของ python ในบทความนี้ มาเริ่มกันเลย!
Polymorphism คืออะไร?
คำว่า polymorphism มาจากคำภาษากรีก poly (หมายถึงหลาย ๆ อัน) และ morphism (รูปแบบ) หมายความว่าชื่อฟังก์ชันหรือชื่อเมธอดเดียวสามารถมีได้หลายรูปแบบ และสิ่งนี้ก็เติมเต็มความปรารถนาที่จะหลีกเลี่ยงความซ้ำซ้อนของโค้ดในการใช้งาน
แต่พหุสัณฐานในไพ ธ อนนั้นแตกต่างเล็กน้อยจากพหุสัณฐานในภาษาโปรแกรมอื่นๆ ภาษาการเขียนโปรแกรมเช่น java และ c++ รองรับความหลากหลายในเวลาคอมไพล์ (เมธอดโอเวอร์โหลด) ในการโอเวอร์โหลดเมธอด หลายเมธอดสามารถมีชื่อเมธอดเดียวกันได้ แต่ต่างกันในลายเซ็นพารามิเตอร์ ฟีเจอร์นี้ไม่รองรับโดย python หากวิธีการหลายวิธีมีฟังก์ชันเดียวกัน การใช้งานฟังก์ชันใหม่ล่าสุดจะแทนที่การใช้งานฟังก์ชันก่อนหน้า
ฟังก์ชัน Polymorphism
ความแตกต่างของฟังก์ชันใน python สามารถแบ่งได้เป็น 2 แบบที่ผู้ใช้กำหนดเอง และ polymorphism ที่กำหนดไว้ล่วงหน้า
เราสามารถใช้พหุสัณฐานที่ผู้ใช้กำหนดเองเพื่อเรียกใช้ฟังก์ชันเดียวกันกับลายเซ็นพารามิเตอร์ที่ต่างกันได้ และนี่ถือได้ว่าเป็นการชดเชยเล็กน้อยสำหรับเมธอดโอเวอร์โหลดในไพ ธ อนที่ไม่สามารถใช้งานได้ มาดูโค้ดตัวอย่างกัน
def mul (a,b,c= 1 ): ส่งคืน a*b*c; พิมพ์ (mul( 1 , 2 , 3 )) พิมพ์ (mul( 1 , 2 )) |
ในโค้ดด้านบนนี้ แม้ว่าจำนวนพารามิเตอร์ที่ส่งผ่านจะไม่เท่ากัน แต่คำสั่ง print ก็อ้างถึงวิธีการเดียวกัน ในการเรียกใช้ฟังก์ชันที่สอง พารามิเตอร์ c ถูกกำหนดด้วยค่าเริ่มต้นเป็น 1
เมธอดที่กำหนดไว้ล่วงหน้าเพียงไม่กี่วิธีใน python จะแสดงคุณลักษณะ polymorphism โดยที่เมธอดเดียวสามารถรับพารามิเตอร์ของประเภทข้อมูลต่างๆ ได้ วิธีการเช่น len() แสดงคุณลักษณะนี้ และนี่คือรหัสเพื่อแสดงให้เห็นว่า
พิมพ์(เลน([ 1 , 2 , 3 , 4 ])) พิมพ์(เลน(( 1 , 2 , 3 , 4 ))) พิมพ์ (len ( “หลาม” )) พิมพ์ (เลน ({ “key1” : “value1” , “key2” : “value2” })) |
ในโค้ดข้างต้น ใช้เมธอด len() เดียวกันสำหรับรายการ ทูเพิล สตริง และพจนานุกรม
ชำระเงิน: แอปพลิเคชั่น Python ในโลกแห่งความจริง
ผู้ประกอบการโอเวอร์โหลด
ตัวดำเนินการเช่น '+' สามารถใช้ได้หลายวิธี ตัวอย่างเช่น สามารถใช้เพื่อเพิ่มตัวเลขสองตัว สตริง และรายการ ฯลฯ และนี่คือรหัสเพื่อสาธิต
l1=[ 1 , 2 , 3 ] l2=[ 3 , 4 , 5 ] n1= 2 n2= 3 s1= “เฮ้” s2= “ที่นั่น” พิมพ์(ล+ล1) พิมพ์ (s1+s2) พิมพ์(n1+n2) |
วิธีการเอาชนะ
การแทนที่เมธอดยังถือเป็นความแตกต่างระหว่างรันไทม์ และได้รับการสนับสนุนจากหลายภาษา เช่น java, c++ และ python
คุณลักษณะนี้เกี่ยวข้องกับการสืบทอด คลาสย่อยใน python สืบทอดฟังก์ชันของสมาชิกและตัวแปรสมาชิกจากคลาสพาเรนต์ และถ้าเรารู้สึกว่าการนำเมธอดคลาสพาเรนต์ไปใช้นั้นไม่เกี่ยวข้อง เราก็สามารถแทนที่เมธอดนั้นในคลาสย่อยได้ และการปรับเปลี่ยนฟังก์ชันสมาชิกตามความต้องการในคลาสลูกจะเรียกว่าวิธีการแทนที่
คลาส two_wheeler : def เชื้อเพลิง (ตัวเอง): พิมพ์( “รถสองล้อต้องการเชื้อเพลิงในการวิ่ง” ) ความจุ def (ตัวเอง): พิมพ์ ( "จักรยานเหมาะสำหรับ 2 คน" ) คลาส ไฟฟ้า _จักรยาน (two_wheeler): def เชื้อเพลิง (ตัวเอง): พิมพ์( “จักรยานไฟฟ้าใช้แบตเตอรี่” ) คลาส petrol_bike (รถสองล้อ): def เชื้อเพลิง (ตัวเอง): พิมพ์( “รถเบนซินวิ่งด้วยน้ำมัน” ) จักรยาน=two_wheeler() ebike=ไฟฟ้า_จักรยาน() pbike=petrol_bike() จักรยาน.เชื้อเพลิง() จักรยาน.ความจุ() ebike.เชื้อเพลิง() ebike.ความจุ() pbike.เชื้อเพลิง() pbike.ความจุ() |
ในรหัสด้านบน two_wheeler เป็นคลาสหลักและ electric_bike, petrol_bike เป็นคลาสย่อย และวิธีการเชื้อเพลิง (), ความจุ () นั้นสืบทอดมาจากคลาสย่อยของ electric_bike และ petrol_bike ตอนนี้ เราสามารถอัปเดตการใช้งานเมธอดได้หากต้องการ และในคลาส electric_bike เราได้ปรับใช้เมธอด fuel() อีกครั้ง ซึ่งได้ปรับใช้เมธอด fuel() อีกครั้งในคลาส petrol_bike

ตัวอย่างเช่น ในรหัส ebike.fuel() พิมพ์ "จักรยานไฟฟ้าใช้แบตเตอรี่" และ pbike.fuel() พิมพ์ว่าจักรยานใช้น้ำมันเบนซิน"
ความหลากหลายในวิธีการเรียน
Python อนุญาตให้คลาสต่าง ๆ มีชื่อเมธอดเหมือนกัน และสิ่งนี้อยู่ภายใต้คุณสมบัติ polymorphism และการเรียกใช้เมธอดจะขึ้นอยู่กับอ็อบเจกต์ที่เราใช้ในการเรียกเมธอด
คลาส จักรยาน : def เชื้อเพลิง (ตัวเอง): พิมพ์( “จักรยานไม่ต้องใช้น้ำมัน!” ) ความจุ def (ตัวเอง): พิมพ์( “จักรยานเหมาะสำหรับการขี่คนเดียว” ) คลาส ไฟฟ้า_จักรยาน : def เชื้อเพลิง (ตัวเอง): พิมพ์( “จักรยานไฟฟ้าใช้แบตเตอรี่” ) ความจุ def (ตัวเอง): พิมพ์ ( “จักรยานไฟฟ้าเหมาะสำหรับสูงสุด 2 คน” ) คลาส เบนซิน_ไบค์ : def เชื้อเพลิง (ตัวเอง): พิมพ์( “รถเบนซินวิ่งด้วยน้ำมัน” ) ความจุ def (ตัวเอง): พิมพ์ ( “รถจักรยานใช้น้ำมันได้ไม่เกิน 2 คน” ) อีโคไบค์=จักรยาน() ebike=ไฟฟ้า_จักรยาน() pbike=petrol_bike() l=[ecobike,ebike,pbike] สำหรับ obj ใน l: obj.เชื้อเพลิง() obj.ความจุ() |
ในโค้ดด้านบนนี้ เราได้สร้างวัตถุสามชิ้นของจักรยานสามคลาส, รถจักรยานไฟฟ้า และ รถเบนซิน_จักรยาน และทั้งสามคลาสมีชื่อเมธอดเหมือนกัน ตอนนี้ เป็นหน้าที่ของคอมไพเลอร์ที่จะตัดสินใจว่าจะต้องเรียกใช้เมธอดใดตามประเภทของอ็อบเจ็กต์ที่ใช้เรียกใช้เมธอด
ตัวอย่างเช่น ecobike.fuel() จะเรียกใช้เมธอด Fuel() ของคลาสจักรยาน และ ebike.fuel() จะเรียกใช้เมธอด Fuel() ของคลาส electric_bike เราผนวกอ็อบเจ็กต์เหล่านี้เข้ากับรายการ และในการวนซ้ำทุกครั้ง เราจะเรียกชื่อฟังก์ชันเดียวกัน แต่ประเภทของอ็อบเจ็กต์ที่เรียกใช้เมธอดจะเปลี่ยนไป ในการวนซ้ำครั้งแรกของคลาสจักรยาน และวิธีการของ electric_bike, petrol_bike ในการวนซ้ำเพิ่มเติม
อ่าน: แนวคิดและหัวข้อโครงการ Python
บทสรุป
ในบทความนี้ เราเข้าใจความหมายของ polymorphism แล้ว กล่าวถึงความแตกต่างของ python ในกรณีของ method overloading เดินผ่านการสาธิตความเป็นไปได้ต่างๆ ของความหลากหลายในงูหลาม เช่น การโอเวอร์โหลดตัวดำเนินการ ความหลากหลายของฟังก์ชัน การแทนที่เมธอด และความหลากหลายในเมธอดของคลาส
ตอนนี้ คุณทราบถึงความแตกต่างในหลามแล้ว ใช้โค้ดหลามตัวถัดไปของคุณโดยใช้คุณสมบัติเหล่านี้ทั้งหมด!
หากคุณอยากเรียนรู้เกี่ยวกับวิทยาศาสตร์ข้อมูล ให้ลองดูประกาศนียบัตร PG ด้านวิทยาศาสตร์ข้อมูลของ IIIT-B และ upGrad ซึ่งสร้างขึ้นสำหรับมืออาชีพด้านการทำงานและเสนอกรณีศึกษาและโครงการมากกว่า 10 รายการ เวิร์กช็อปภาคปฏิบัติจริง การให้คำปรึกษากับผู้เชี่ยวชาญในอุตสาหกรรม 1- on-1 กับที่ปรึกษาในอุตสาหกรรม การเรียนรู้มากกว่า 400 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ
