
Polymorphism คืออะไร?
ความหลากหลายสามารถกำหนดเป็นเงื่อนไขที่เกิดขึ้นในหลายรูปแบบ เป็นแนวคิดในการเขียนโปรแกรม Python ซึ่งวัตถุที่กำหนดใน Python สามารถนำมาใช้ในรูปแบบต่างๆ อนุญาตให้โปรแกรมเมอร์กำหนดวิธีการต่าง ๆ ในคลาสที่ได้รับ และมีชื่อเดียวกับที่มีอยู่ในคลาสพาเรนต์ สถานการณ์ดังกล่าวรองรับวิธีการโอเวอร์โหลดใน Python
ในบทช่วยสอน Python Polymorphism คุณจะได้เรียนรู้:
- Polymorphism คืออะไร?
- ความหลากหลายในตัวดำเนินการ
- ความหลากหลายในวิธีการที่ผู้ใช้กำหนด
- ความหลากหลายในฟังก์ชัน
- ความหลากหลายและการสืบทอด
- ความแตกต่างกับวิธีการเรียน
- ความแตกต่างระหว่างวิธีการโอเวอร์โหลดและ Polymorphism เวลาคอมไพล์
ความหลากหลายในตัวดำเนินการ
ตัวดำเนินการใน Python ช่วยดำเนินการทางคณิตศาสตร์และงานเขียนโปรแกรมอื่นๆ อีกหลายอย่าง ตัวอย่างเช่น ตัวดำเนินการ '+' ช่วยในการเพิ่มระหว่างประเภทจำนวนเต็มสองประเภทใน Python และในทำนองเดียวกัน โอเปอเรเตอร์เดียวกันจะช่วยในการเชื่อมสตริงในการเขียนโปรแกรม Python
ให้เรายกตัวอย่างของตัวดำเนินการ + (บวก) ใน Python เพื่อแสดงแอปพลิเคชันของ Polymorphism ใน Python ดังที่แสดงด้านล่าง:
รหัสหลาม:
p = 55 q = 77 r = 9.5 g1 = "ปราชญ์" g2 = "99!" พิมพ์ ("ผลรวมของตัวเลขสองตัว", p + q) print("ชนิดข้อมูลของผลลัพธ์คือ",type(p + q)) print("ผลรวมของตัวเลขสองตัว",q + r) พิมพ์ ("ประเภทข้อมูลของผลลัพธ์คือ" ประเภท (q + r)) พิมพ์ ("สตริงที่ต่อกันคือ", g1 + g2) print("ประเภทข้อมูลของสองสตริง",type(g1 + g2))
เอาท์พุท:
ผลรวมของสองตัวเลข 132 ชนิดข้อมูลของผลลัพธ์คือ <class 'int'> ผลรวมของทั้งสองตัวเลข 86.5 ชนิดข้อมูลของผลลัพธ์คือ <class 'float'> สตริงที่ต่อกันคือ Guru99! ชนิดข้อมูลของสองสตริง <class 'str'>
ตัวอย่างข้างต้นถือได้ว่าเป็นตัวอย่างของการโอเวอร์โหลดโอเปอเรเตอร์
ความหลากหลายในวิธีการที่ผู้ใช้กำหนด
วิธีการกำหนดโดยผู้ใช้ในภาษาการเขียนโปรแกรม Python เป็นวิธีที่ผู้ใช้สร้างขึ้นและประกาศโดยใช้คำหลัก def พร้อมชื่อฟังก์ชัน
ความแตกต่างในภาษาการเขียนโปรแกรม Python ทำได้โดยวิธีการโอเวอร์โหลดและการแทนที่ Python กำหนดวิธีการด้วยคำหลัก def และมีชื่อเดียวกันทั้งในคลาสลูกและพาเรนต์
ให้เรายกตัวอย่างดังต่อไปนี้ที่แสดงด้านล่าง: –
รหัสหลาม:
จากคณิตศาสตร์ นำเข้าpi คลาสสแควร์: def __init__ (ตัวเอง, ความยาว): self.l = ความยาว def ปริมณฑล (ตัวเอง): ส่งคืน 4 * (self.l) พื้นที่ def (ตัวเอง): กลับ self.l * self.l วงคลาส: def __init__ (ตัวเอง, รัศมี): self.r = รัศมี def ปริมณฑล (ตัวเอง): ส่งคืน 2 * pi * self.r พื้นที่ def (ตัวเอง): ส่งคืน pi * self.r * * 2 #เริ่มต้นคลาส sqr = สี่เหลี่ยม (10) c1 = วงกลม(4) print("ปริมณฑลคำนวณสำหรับสี่เหลี่ยม: ", sqr.perimeter()) print("พื้นที่คำนวณสำหรับสี่เหลี่ยม: ", sqr.area()) print("ปริมณฑลคำนวณสำหรับ Circle: ", c1.perimeter()) print("พื้นที่คำนวณสำหรับ Circle: ", c1.area())
เอาท์พุท:
ปริมณฑลคำนวณสำหรับสี่เหลี่ยมจัตุรัส: 40 พื้นที่คำนวณสำหรับตาราง: 100 เส้นรอบวงคำนวณสำหรับวงกลม: 25.132741228718345 พื้นที่คำนวณสำหรับ Circle: 50.26548245743669
ในโค้ดด้านบนนี้ มีวิธีที่ผู้ใช้กำหนดสองวิธี คือ ปริมณฑลและพื้นที่ ซึ่งกำหนดไว้ในคลาสวงกลมและสี่เหลี่ยม
ดังที่แสดงไว้ข้างต้น ทั้งคลาสแบบวงกลมและคลาสสแควร์เรียกชื่อเมธอดเดียวกันเพื่อแสดงคุณสมบัติของโพลิมอร์ฟิซึมเพื่อส่งมอบเอาต์พุตที่ต้องการ
ความหลากหลายในฟังก์ชัน
ฟังก์ชันในตัวใน Python ได้รับการออกแบบและรองรับการรันข้อมูลหลายประเภท ใน Python Len()
เป็นหนึ่งในฟังก์ชั่นที่สำคัญในตัว
ใช้งานได้กับข้อมูลหลายประเภท: รายการ ทูเพิล สตริง และพจนานุกรม ฟังก์ชัน Len () ส่งคืนข้อมูลที่แน่นอนซึ่งสอดคล้องกับข้อมูลหลายประเภทเหล่านี้
รูปต่อไปนี้แสดงวิธีการใช้ Polymorphism ใน Python ที่สัมพันธ์กับฟังก์ชันที่สร้างขึ้น: –
โปรแกรมต่อไปนี้ช่วยในการอธิบายการประยุกต์ใช้ Polymorphism ใน Python: –
รหัสหลาม:
พิมพ์ ("ความยาวของสตริง Guru99 คือ ",len("Guru99")) print("ความยาวของรายการคือ ,len(["Guru99","Example","Reader"])) print("ความยาวของพจนานุกรมคือ ",len({"ชื่อเว็บไซต์":"Guru99","Type":"Education"}))
เอาท์พุท:
ความยาวของสาย Guru99 คือ 6 ความยาวของรายการคือ3 ความยาวของพจนานุกรมคือ2
ในตัวอย่างข้างต้น ฟังก์ชัน Len () ของ Python ดำเนินการ Polymorphism สำหรับประเภทข้อมูลสตริง รายการ และพจนานุกรม ตามลำดับ
ความหลากหลายและการสืบทอด
การสืบทอดใน Python สามารถกำหนดเป็นแนวคิดการเขียนโปรแกรมที่คลาสย่อยกำหนดคุณสมบัติสืบทอดจากคลาสฐานอื่นที่มีอยู่ใน Python
มีสองแนวคิดหลักของ Python ที่เรียกว่า method overriding และ method overloading
- ในการโอเวอร์โหลดเมธอด Python มีคุณสมบัติในการสร้างเมธอดที่มีชื่อเดียวกันเพื่อดำเนินการหรือรันฟังก์ชันต่างๆ ในส่วนโค้ดที่กำหนด อนุญาตให้ใช้วิธีการโอเวอร์โหลดและใช้เพื่อทำงานต่าง ๆ ในแง่ที่ง่ายกว่า
- ในการแทนที่เมธอด Python จะแทนที่ค่าที่ใช้ชื่อที่คล้ายกันในคลาสพาเรนต์และคลาสย่อย
ให้เรายกตัวอย่างต่อไปนี้ของ Polymorphism and inheritance ดังที่แสดงด้านล่าง: –
รหัสหลาม:
คลาสเบสคลาส: def __init__ (ตัวเอง, ชื่อ): self.name = ชื่อ def area1(ตัวเอง): ผ่าน def __str__(ตัวเอง): กลับชื่อตัวเอง คลาสสี่เหลี่ยมผืนผ้า (เบสคลาส): def __init__(ตัวเอง ความยาว ความกว้าง): super().__init__("สี่เหลี่ยมผืนผ้า") self.length = ความยาว self.breadth = ความกว้าง def area1(ตัวเอง): กลับความยาวตัวเอง * self.breadth คลาสสามเหลี่ยม(เบสคลาส): def __init__(ตัวเอง ความสูง ฐาน): super().__init__("สามเหลี่ยม") self.height = ความสูง self.base = ฐาน def area1(ตัวเอง): ผลตอบแทน (self.base * self.height) / 2 a = สี่เหลี่ยมผืนผ้า (90, 80) b = สามเหลี่ยม(77, 64) print("รูปร่างคือ: ", b) print("พื้นที่ของรูปทรงคือ", b.area1()) พิมพ์ ("รูปร่างคือ:", ก) print("พื้นที่ของรูปทรงคือ", a.area1())
เอาท์พุท:
รูปร่างคือ: สามเหลี่ยม พื้นที่ของรูปทรงคือ 2464.0 รูปร่างคือ: สี่เหลี่ยมผืนผ้า พื้นที่ของรูปทรงคือ 7200
ในโค้ดข้างต้น เมธอดมีชื่อเดียวกับเมธอด init และเมธอด area1 วัตถุของคลาสสแควร์และสี่เหลี่ยมจะใช้เพื่อเรียกใช้ทั้งสองวิธีเพื่อทำงานที่แตกต่างกันและให้ผลลัพธ์ของพื้นที่ของสี่เหลี่ยมและสี่เหลี่ยม
ความแตกต่างกับวิธีการเรียน
การเขียนโปรแกรม Python ช่วยให้โปรแกรมเมอร์บรรลุ Polymorphism และการโอเวอร์โหลดเมธอดด้วยเมธอดของคลาส คลาสต่างๆ ใน Python สามารถมีเมธอดที่ประกาศในชื่อเดียวกันในโค้ด Python
ใน Python สามารถกำหนดคลาสที่แตกต่างกันได้สองคลาส คลาสแรกจะเป็นคลาสลูก และมาจากแอททริบิวจากคลาสอื่นที่กำหนดไว้ซึ่งเรียกว่าคลาสพาเรนต์
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงแนวคิดของ Polymorphism ด้วยวิธีการเรียน: –
รหัสหลาม:
คลาสอเมซอน: def __init__(ตัวเอง, ชื่อ, ราคา): self.name = ชื่อ self.price = ราคา ข้อมูล def (ตัวเอง): print("นี่คือผลิตภัณฑ์และคลาส am ถูกเรียกใช้ ชื่อคือ {self.name} ค่าใช้จ่ายนี้ {self.price} รูปี") ฟลิปคาร์ทคลาส: def __init__(ตัวเอง, ชื่อ, ราคา): self.name = ชื่อ self.price = ราคา ข้อมูล def (ตัวเอง): พิมพ์ (f "นี่คือผลิตภัณฑ์และคลาส fli ถูกเรียกใช้ ชื่อคือ {self.name} ค่าใช้จ่ายนี้ {self.price} รูปี") FLP = flipkart ("iPhone", 2.5) AMZ = อเมซอน ("ไอโฟน", 4) สำหรับ product1 ใน (FLP, AMZ): product1.info()
เอาท์พุท:
นี่คือผลิตภัณฑ์ และคลาส fli ถูกเรียกใช้ ชื่อคือ iPhone และมีราคา 2.5 รูปี นี่คือผลิตภัณฑ์ และคลาส am ถูกเรียกใช้ ชื่อคือ iPhone และมีราคา 4 รูปี
ในโค้ดด้านบน คลาสที่แตกต่างกันสองคลาสที่ตั้งชื่อเป็น flipkart และ amazon ใช้ชื่อเมธอดเดียวกัน info และ init เพื่อเสนอราคาผลิตภัณฑ์ตามลำดับ และแสดงแนวคิดของ Polymorphism เพิ่มเติมใน Python
ความแตกต่างระหว่างวิธีการโอเวอร์โหลดและ Polymorphism เวลาคอมไพล์
ในเวลาคอมไพล์ Polymorphism คอมไพเลอร์ของโปรแกรม Python จะแก้ไขการโทร Compile-time Polymorphism ทำได้โดยใช้วิธีการโอเวอร์โหลด
คอมไพเลอร์ Python ไม่แก้ไขการโทรระหว่างรันไทม์สำหรับความหลากหลาย นอกจากนี้ยังจัดประเภทเป็นวิธีการแทนที่ซึ่งวิธีการเดียวกันมีลายเซ็นหรือคุณสมบัติที่คล้ายกัน แต่เป็นส่วนหนึ่งของคลาสที่แตกต่างกัน
สรุป:
- ความหลากหลายสามารถกำหนดเป็นเงื่อนไขที่เกิดขึ้นในหลายรูปแบบ
- ตัวดำเนินการใน Python ช่วยดำเนินการทางคณิตศาสตร์และงานเขียนโปรแกรมอื่นๆ อีกหลายอย่าง
- วิธีการกำหนดโดยผู้ใช้ในภาษาการเขียนโปรแกรม Python เป็นวิธีที่ผู้ใช้สร้างขึ้นและประกาศโดยใช้คำหลัก def พร้อมชื่อฟังก์ชัน
- Polymorphism ใน Python มีคุณสมบัติที่พึงประสงค์หลายประการ เช่น ส่งเสริมการนำรหัสกลับมาใช้ใหม่ได้สำหรับคลาสและเมธอดต่างๆ
- คลาสลูกเป็นคลาสที่ได้รับ และได้รับแอททริบิวจากคลาสพาเรนต์
- ความหลากหลายยังเกิดขึ้นได้ด้วยการแทนที่เมธอดรันไทม์และการโอเวอร์โหลดเมธอดเวลาคอมไพล์
- ความหลากหลายใน Python ยังเกิดขึ้นได้จากการโอเวอร์โหลดตัวดำเนินการและเมธอดของคลาส