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 ชั่วโมงและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

เตรียมความพร้อมสู่อาชีพแห่งอนาคต

UPGRAD และ IIIT-BANGALORE'S PG DIPLOMA ใน DATA SCIENCE
ลงทะเบียนตอนนี้ที่ UPGRAD