วิธีการเอาชนะใน Python: มันคืออะไร, ทำอย่างไร?
เผยแพร่แล้ว: 2021-09-28Python เป็นภาษาที่ใช้งานทั่วไประดับสูงซึ่งเป็นสิ่งที่ต้องเรียนรู้สำหรับผู้ที่ชื่นชอบการเขียนโปรแกรมคอมพิวเตอร์ คล้ายกับภาษาคอมพิวเตอร์ที่ใช้กันอย่างแพร่หลายอื่น ๆ เช่น JAVA, C++, Golang, Ruby เป็นต้น Python เป็นภาษาโปรแกรมเชิงวัตถุที่การเข้ารหัสขึ้นอยู่กับคลาสและวัตถุ แนวคิดนี้ช่วยให้นักพัฒนาสามารถจัดโครงสร้างโค้ดที่เรียบง่ายและนำกลับมาใช้ใหม่ได้ ซึ่งจะแสดงถึงแต่ละอ็อบเจ็กต์ มีคุณสมบัติที่มีประโยชน์หลายอย่างที่ภาษา OOP นำเสนอ หนึ่งในนั้นคือ Method Overriding
ในบทความนี้ เราจะเข้าใจแนวคิดของการสืบทอดเพื่อสำรวจวิธีการแทนที่ใน Python มาเริ่มด้วยการทำความเข้าใจว่าคลาสคืออะไร
สารบัญ
คลาสคืออะไร?
คลาสเป็นคุณลักษณะหรืออินสแตนซ์ในกระบวนทัศน์การเขียนโปรแกรมเชิงวัตถุ เป็นเทมเพลตการเข้ารหัสโปรแกรมแบบขยายภายในโปรแกรม คลาสช่วยให้โปรแกรมเมอร์ป้อนข้อมูลเริ่มต้นของแต่ละอ็อบเจ็กต์ (อาร์เรย์ สตริง ตัวแปร ฯลฯ) ในขณะที่สร้าง นอกจากนี้ยังช่วยให้เราสามารถกำหนดลักษณะของชั้นเรียนและกำหนดวิธีที่พวกเขาจะประมวลผลข้อมูลหรือป้อนข้อมูล มีคลาสย่อยหรือคลาสย่อยภายใต้ parent-classes หรือ superclasses ที่กำหนดไว้ในโปรแกรม
มรดกคืออะไร? ประโยชน์ของมันคืออะไร?
การสืบทอดในการเขียนโปรแกรมเชิงวัตถุเป็นคุณสมบัติที่อนุญาตให้คุณลักษณะของคลาสได้รับการสืบทอดไปยังคลาสหรือคลาสย่อยอื่น ซึ่งจะช่วยป้องกันความซ้ำซ้อนของข้อมูล คอมไพล์โปรแกรมได้ดีขึ้น และจำกัดขอบเขตของการทำผิดพลาด
ความสามารถของคลาสในการสืบทอดหรือสืบทอดคุณสมบัติจากคลาสอื่นเรียกว่าการสืบทอด คลาสที่มีคุณสมบัติและคุณสมบัติที่ใช้เพื่อสร้างคลาสย่อยเรียกว่าคลาสพาเรนต์
นี่คือประโยชน์ของมรดก:
- การสืบทอดทำให้ผู้ใช้สามารถแสดงความสัมพันธ์แบบเรียลไทม์ได้ดี
- อนุญาตให้ใช้รหัสซ้ำได้ นอกจากนี้ยังช่วยให้โปรแกรมเมอร์สามารถจัดเตรียมคุณลักษณะเพิ่มเติมให้กับชั้นเรียนได้
- ช่วยให้เกิดการเปลี่ยนแปลง สมมติว่าคลาส Q มาจากคลาส W จากนั้นคลาสย่อยของ Q จะสืบทอดจากคลาส W โดยอัตโนมัติ
ประเภทของมรดก
มรดกมี 3 ประเภท ดังนี้
1. มรดกเดี่ยว
ในการสืบทอดเดี่ยว คลาสที่ได้รับสามารถสืบทอดคุณสมบัติจากคลาสพาเรนต์เดียว ช่วยให้สามารถใช้รหัสซ้ำและเพิ่มคุณสมบัติใหม่ได้
2. มรดกหลายอย่าง
หมายถึงการถ่ายโอนคุณสมบัติของคลาสพาเรนต์มากกว่าหนึ่งคลาสไปยังคลาสย่อย ที่นี่ คุณสมบัติของคลาสฐานจะสืบทอดไปยังคลาสย่อยโดยอัตโนมัติ
3. มรดกหลายระดับ
เมื่อคุณสมบัติของคลาสพาเรนต์และคลาสย่อยได้รับการสืบทอดต่อไปยังคลาสที่ได้รับมาอีกคลาสหนึ่ง จะเรียกว่าการสืบทอดหลายระดับ
วิธีการเอาชนะใน Python คืออะไร?
การแทนที่เมธอดเป็นคุณลักษณะของภาษาการเขียนโปรแกรมเชิงวัตถุ โดยที่คลาสย่อยหรือคลาสย่อยสามารถจัดเตรียมโปรแกรมที่มีคุณสมบัติเฉพาะหรือกระบวนการนำข้อมูลไปใช้ที่กำหนดไว้แล้วในคลาสพาเรนต์หรือซูเปอร์คลาส
เมื่อมีการป้อนค่าส่งคืน พารามิเตอร์ หรือชื่อเดียวกันในคลาสย่อยเหมือนกับในคลาสพาเรนต์ วิธีการนำไปใช้ในคลาสย่อยจะแทนที่เมธอดตามที่กล่าวไว้ในคลาสพาเรนต์ นี้เรียกว่าวิธีการแทนที่
การดำเนินการขึ้นอยู่กับข้อมูลที่ใช้ในการเรียกใช้เมธอดและไม่ใช่ข้อมูลอ้างอิงที่ให้ไว้ในคลาสพาเรนต์ หากวัตถุของคลาสพาเรนต์ถูกใช้เพื่อเรียกใช้วิธีการนำไปใช้งานเฉพาะสำหรับโปรแกรม เวอร์ชันของเมธอดที่เขียนในคลาสพาเรนต์จะถูกเรียกใช้ ในทางกลับกัน หากวัตถุของคลาสย่อยถูกใช้เพื่อเรียกใช้เมธอด การดำเนินการจะเป็นไปตามคุณสมบัติที่กล่าวถึงในคลาสย่อย หากคุณเป็นมือใหม่และต้องการได้รับความเชี่ยวชาญด้านวิทยาศาสตร์ข้อมูล โปรดดูหลักสูตรวิทยาศาสตร์ข้อมูลของเรา
คุณสมบัติของวิธีการเอาชนะ
ส่วนนี้จะสำรวจคุณสมบัติเด่นที่วิธีการแทนที่ใน python นำเสนอ:
- การแทนที่เมธอดทำให้สามารถใช้ฟังก์ชันและเมธอดใน Python ที่มีชื่อหรือลายเซ็นเหมือนกันได้
- เมธอดโอเวอร์โหลดเป็นตัวอย่างของความแตกต่างระหว่างรันไทม์
- ในการแทนที่เมธอด จำเป็นต้องใช้คุณลักษณะของการสืบทอดเสมอ
- เมธอดโอเวอร์โหลดจะดำเนินการระหว่างคลาสพาเรนต์และคลาสย่อย
- ใช้เพื่อเปลี่ยนพฤติกรรมและการนำวิธีการที่มีอยู่ไปใช้
- จำเป็นต้องมีอย่างน้อยสองคลาสเสมอสำหรับการแทนที่เมธอด
การทำความเข้าใจวิธีการเอาชนะ: การสืบทอดหลายระดับและหลายระดับ
การสืบทอดหลายระดับและหลายระดับเป็นการสืบทอดสองประเภทที่นำเสนอโดยภาษาโปรแกรมเชิงวัตถุส่วนใหญ่ ในส่วนนี้ เราจะมาดูกันว่าวิธีการแทนที่ถูกใช้อย่างไรในการสืบทอดที่หลากหลายและหลายระดับ:
1. มรดกหลายอย่าง
ในการสืบทอดคลาสหรืออ็อบเจ็กต์ประเภทนี้ คลาสย่อยจะสืบทอดคุณลักษณะและคุณสมบัติของคลาสพาเรนต์หรือเบสหลายคลาส ตัวอย่างเช่น มีคลาสพาเรนต์ที่แตกต่างกันสามคลาส- class.1, class.2, class.3 และมี class.a ซึ่งเป็นคลาสย่อยที่ดำเนินการคุณลักษณะของการสืบทอดหลายรายการ class.a จะมีคุณสมบัติที่สืบทอดมาจากคลาสพื้นฐานทั้งสามคลาส
นี่คือตัวอย่างโปรแกรม:
# การกำหนดคลาสผู้ปกครอง 1
คลาส Parent1():
#วิธีโชว์ของผู้ปกครอง
def แสดง (ตัวเอง):
พิมพ์ (“ภายใน Parent1”)
# การกำหนดคลาสผู้ปกครอง2
คลาส Parent2():
#วิธีโชว์ของผู้ปกครอง
จอแสดงผล def (ตัวเอง):
พิมพ์ (“ภายใน Parent2”)
#กำหนดคลาสลูก
คลาส Child(Parent1, Parent2):
#วิธีโชว์ของลูก
def แสดง (ตัวเอง):
พิมพ์("ในเด็ก")
#รหัสคนขับ
obj = เด็ก ()
obj.show()
obj.display()
เอาท์พุท:
ภายในเด็ก
ภายใน Parent2
2. มรดกหลายระดับ
ในการสืบทอดคลาสหรืออ็อบเจ็กต์ประเภทนี้ คลาสย่อยจะสืบทอดโดยตรงจากคลาสฐาน ซึ่งมีคุณสมบัติของคลาสพาเรนต์อยู่แล้ว โดยพื้นฐานแล้วมันเหมือนกับความสัมพันธ์แบบพ่อ-ลูกหรือปู่-หลาน คุณสมบัติของคลาสย่อยนั้นไม่ซ้ำกับคลาสพาเรนต์ ตัวอย่างเช่น มีคลาสพาเรนต์ชื่อ class.Q และคลาสย่อยถูกสร้างขึ้นในส่วนขยายของ class.Q ที่นี่ คลาสย่อยสามารถทำหน้าที่เป็นคลาสพื้นฐานสำหรับคลาสย่อยอื่น
นี่คือตัวอย่างโปรแกรม:
ระดับผู้ปกครอง ():
จอแสดงผล def (ตัวเอง):
พิมพ์ (“ภายในผู้ปกครอง”)
ชั้นเรียน เด็ก(ผู้ปกครอง):
#วิธีโชว์ของลูก
def แสดง (ตัวเอง):
พิมพ์("ในเด็ก")
คลาส GrandChild(เด็ก):
#วิธีโชว์ของลูก
def แสดง (ตัวเอง):
พิมพ์ (“Inside GrandChild”)
#รหัสไดรเวอร์
ก. = หลาน()
g.show()
g.display()
เอาท์พุต :
ภายใน GrandChild
ภายในผู้ปกครอง
การเรียกใช้เมธอดคลาสพื้นฐานภายในเมธอดที่ถูกแทนที่
มีวิธีหนึ่งที่สามารถเรียกใช้เมธอดคลาสพาเรนต์ระหว่างเมธอดที่ถูกแทนที่ได้ สามารถทำได้โดยใช้กระบวนการต่อไปนี้:
ใช้ชื่อคลาส
การเขียนเมธอดชื่อคลาสในเมธอดที่ถูกแทนที่ในคลาสย่อยสามารถเรียกใช้เมธอดที่ให้ไว้ในคลาสพาเรนต์
การใช้ฟังก์ชัน super()
ภาษาการเขียนโปรแกรมของ Python มีฟังก์ชันที่เรียกว่า super() ซึ่งใช้เพื่ออ้างถึงคลาสพาเรนต์โดยเฉพาะ
บทสรุป
การแทนที่เมธอดเป็นหนึ่งในคุณสมบัติที่สำคัญที่สุดของภาษา Python สถานที่ให้บริการพบว่ามีการใช้งานอย่างกว้างขวางในการเขียนโปรแกรมแอปพลิเคชันวิทยาศาสตร์ข้อมูล และช่วยให้สามารถวิเคราะห์ข้อมูลได้อย่างมีประสิทธิภาพและกะทัดรัด การแทนที่เมธอดยังทำให้การรวบรวมโค้ดและการตรวจสอบซ้ำง่ายขึ้นอีกด้วย มีข้อกำหนดเบื้องต้นบางประการในการใช้คุณลักษณะนี้: การทำความเข้าใจแนวคิดพื้นฐานของคลาสและการสืบทอด
หากคุณต้องการเรียนรู้เชิงลึกเกี่ยวกับการแทนที่เมธอดใน Python เราขอแนะนำให้คุณสมัครเรียน หลักสูตร Master of Science in Data Science ระยะ เวลา 18 เดือน upGrad เปิดสอนหลักสูตรนี้จาก IIIT Bangalore และ Liverpool John Moore's University หลักสูตรนี้จะสอนทักษะต่างๆ เช่น สถิติ การวิเคราะห์เชิงทำนายโดยใช้ Python การเรียนรู้ของเครื่อง การแสดงข้อมูล การวิเคราะห์ข้อมูลขนาดใหญ่ และอื่นๆ นักเรียนที่มีความรู้เชิงลึกเกี่ยวกับแนวคิดของ Python จะอยู่ในตำแหน่งที่ดีในการจัดการกับวิชาต่างๆ เช่น การเรียนรู้เชิงลึก การประมวลผลภาษาธรรมชาติ การวิเคราะห์ธุรกิจ และวิศวกรรมข้อมูล
ติดต่อเราวันนี้เพื่อเริ่มต้นเส้นทางการเรียนรู้ของคุณ!
แยกความแตกต่างระหว่างการเอาชนะและการโอเวอร์โหลด
ความแตกต่างหลักระหว่างการแทนที่และการโอเวอร์โหลดคือ การแทนที่เกิดขึ้นระหว่างวิธีการเดียวกันหรือลายเซ็นเดียวกัน ในขณะที่การโอเวอร์โหลดเกิดขึ้นระหว่างเมธอดคลาสเดียวกัน
1. เมธอดโอเวอร์โหลดเป็นตัวอย่างพหุสัณฐานของเวลาคอมไพล์ ในขณะที่เมธอดที่แทนที่ตัวอย่างพหุสัณฐานของรันไทม์
2. เมธอดโอเวอร์โหลดไม่สามารถดำเนินการได้ใน Python ในขณะที่การโอเวอร์ไรด์เมธอดสามารถดำเนินการได้ภายใต้เงื่อนไขบางประการ
คุณสมบัติของวิธีการเอาชนะคืออะไร?
นี่คือคุณสมบัติของวิธีการแทนที่:
1. เป็นตัวอย่างความแตกต่างของรันไทม์
2. สร้างการเชื่อมโยงระหว่างคลาสหลักและคลาสย่อย
3. เนื่องจากมันเชื่อมต่อกันอย่างน้อยหนึ่งคลาส เราจึงต้องใช้คุณสมบัติของการสืบทอด
4. การแทนที่เมธอดช่วยให้คุณใช้ชื่อเดียวสำหรับฟังก์ชันได้มากกว่าหนึ่งฟังก์ชัน
เราใช้วิธีการแทนที่เพื่อใช้วิธีการของคลาสหลักในคลาสที่ได้รับ
มรดกประเภทต่าง ๆ มีอะไรบ้าง? เป็นไปได้ไหมที่จะแทนที่วิธีการส่วนตัวใน Python?
โดยพื้นฐานแล้ว การแทนที่เมธอดจะใช้การสืบทอดหลายระดับและการสืบทอดหลายรายการ
ในการสืบทอดหลายระดับ คลาสย่อยนั้นสืบทอดมาจากคลาสพื้นฐานที่ประกอบด้วยคุณสมบัติของคลาสพาเรนต์ แต่ในกรณีของการสืบทอดหลายรายการ คลาสย่อยจะแสดงคุณสมบัติของคลาสพาเรนต์หรือเบสมากกว่าหนึ่งคลาสหรือมากกว่า
การแทนที่เมธอดส่วนตัวไม่สามารถเกิดขึ้นใน Java ได้ แต่สามารถทำได้ใน Python โดยใช้กระบวนการที่เรียกว่า 'name mangling'