ความแตกต่างใน Python พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

ความแตกต่างใน Python ช่วยให้ส่วนต่อประสานเดียวสามารถทำงานกับวัตถุประเภทต่างๆ ได้ ดังนั้นเมธอดหรือตัวดำเนินการเดียวกันจึงทำงานแตกต่างกันไปตามวัตถุนั้นๆ สิ่งนี้ปรากฏให้เห็นได้จากการโอเวอร์โหลดตัวดำเนินการ ฟังก์ชันในตัว เมธอดที่ผู้ใช้กำหนดเอง และการสืบทอดคุณสมบัติ Python โปรแกรม

  • 🔘 ความหมาย: Polymorphism หมายถึง “หลายรูปแบบ” ซึ่งอนุญาตให้อินเทอร์เฟซหนึ่งทำงานกับประเภทข้อมูลหรือคลาสที่แตกต่างกันได้
  • ☑️ Operaการโอเวอร์โหลดของมอเตอร์: ตัวดำเนินการ + ใช้สำหรับบวกตัวเลข แต่ใช้เชื่อมสตริง แสดงให้เห็นถึงความหลากหลายของตัวดำเนินการ (operator polymorphism)
  • ฟังก์ชั่นในตัว: ฟังก์ชันต่างๆ เช่น len() สามารถใช้งานได้กับทั้งสตริง ลิสต์ และพจนานุกรม
  • 🧪 วิธีการที่ผู้ใช้กำหนดเอง: คลาสต่างๆ สามารถใช้ชื่อเมธอดร่วมกันได้ เช่น area() และ perimeter() สำหรับรูปทรงต่างๆ
  • 🛠️ มรดก: การเขียนทับเมธอด (Method overriding) ช่วยให้คลาสลูกสามารถกำหนดนิยามใหม่ของเมธอดในคลาสแม่ได้ในระหว่างการทำงานของโปรแกรม
  • 🤖 ความเกี่ยวข้องของ AI: ไลบรารีแมชชีนเลิร์นนิงนำอินเทอร์เฟซที่ใช้ร่วมกัน เช่น fit() และ forward() มาใช้ซ้ำในโมเดลต่างๆ

ความแตกต่างใน Python

Polymorphism คืออะไร?

Polymorphism สามารถกำหนดได้ว่าเป็นเงื่อนไขที่เกิดขึ้นในหลายรูปแบบ เป็นแนวคิดใน Python การเขียนโปรแกรมโดยที่วัตถุกำหนดไว้ Python สามารถใช้งานได้หลากหลาย ช่วยให้โปรแกรมเมอร์สามารถกำหนดวิธีการต่างๆ ในคลาสที่ได้รับและมีชื่อเดียวกับที่มีอยู่ในคลาสหลัก สถานการณ์ดังกล่าวสนับสนุนวิธีการโอเวอร์โหลดใน Python.

ความแตกต่างใน Operaโปร

ผู้ดำเนินการใน Python ช่วยดำเนินการทางคณิตศาสตร์และงานการเขียนโปรแกรมอื่นๆ อีกหลายงาน ตัวอย่างเช่น ตัวดำเนินการ "+" ช่วยในการบวกระหว่างประเภทจำนวนเต็มสองประเภทใน Pythonและในลักษณะเดียวกัน ตัวดำเนินการเดียวกันจะช่วยในการต่อสตริงใน Python การเขียนโปรแกรม

ให้เรายกตัวอย่าง + (บวก) โอเปอเรเตอร์ Python เพื่อแสดงการประยุกต์ใช้ Polymorphism ใน Python ดังต่อไปนี้:

Python Code:

p = 55
q = 77
r = 9.5
g1 = "Guru"
g2 = "99!"
print("the sum of two numbers",p + q)
print("the data type of result is",type(p + q))
print("The sum of two numbers",q + r)
print("the data type of result is", type (q + r))
print("The concatenated string is", g1 + g2)
print("The data type of two strings",type(g1 + g2))

Output:

the sum of two numbers 132
the data type of result is <class 'int'>

The sum of the two numbers 86.5
the data type of result is <class 'float'>

The concatenated string is Guru99!
The data type of two strings <class 'str'>

ตัวอย่างข้างต้นสามารถถือได้ว่าเป็นตัวอย่างของการโอเวอร์โหลดตัวดำเนินการอีกด้วย

ความหลากหลายในวิธีการที่ผู้ใช้กำหนด

วิธีการที่ผู้ใช้กำหนดใน Python ภาษาการเขียนโปรแกรมเป็นวิธีการที่ผู้ใช้สร้างขึ้น และประกาศโดยใช้คีย์เวิร์ด def พร้อมชื่อฟังก์ชัน

ความแตกต่างใน Python ภาษาการเขียนโปรแกรมทำได้โดยการโอเวอร์โหลดและการแทนที่วิธีการ Python กำหนดวิธีการด้วยคีย์เวิร์ด def และมีชื่อเดียวกันทั้งในคลาสย่อยและคลาสพาเรนต์

ให้เราลองยกตัวอย่างดังที่แสดงด้านล่างนี้: –

Python Code:

from math
import pi
class square:
    def __init__(self, length):
    self.l = length
def perimeter(self):
    return 4 * (self.l)
def area(self):
    return self.l * self.l
class Circle:
    def __init__(self, radius):
    self.r = radius
def perimeter(self):
    return 2 * pi * self.r
def area(self):
    return pi * self.r * * 2
# Initialize the classes
sqr = square(10)
c1 = Circle(4)
print("Perimeter computed for square: ", sqr.perimeter())
print("Area computed for square: ", sqr.area())
print("Perimeter computed for Circle: ", c1.perimeter())
print("Area computed for Circle: ", c1.area())

Output:

Perimeter computed for square:  40
Area computed for square:  100
Perimeter computed for Circle:  25.132741228718345
Area computed for Circle:  50.26548245743669

ในโค้ดข้างต้น มีสองวิธีที่ผู้ใช้กำหนด ได้แก่ เส้นรอบวงและพื้นที่ ซึ่งกำหนดไว้ในคลาสวงกลมและสี่เหลี่ยม

ดังที่แสดงไว้ข้างต้น ทั้งคลาสวงกลมและคลาสสแควร์เรียกใช้ชื่อเมธอดเดียวกันซึ่งแสดงคุณลักษณะของ Polymorphism เพื่อส่งมอบเอาต์พุตที่ต้องการ

ความแตกต่างในฟังก์ชัน

ฟังก์ชั่นในตัวใน Python ได้รับการออกแบบและทำให้เข้ากันได้กับการประมวลผลข้อมูลหลายประเภท ใน Pythonlen() เป็นหนึ่งในฟังก์ชันพื้นฐานที่สำคัญ

ฟังก์ชันนี้ใช้งานได้กับข้อมูลหลายประเภท ได้แก่ ลิสต์ ทูเพิล สตริง และพจนานุกรม โดยฟังก์ชัน len() จะส่งคืนข้อมูลที่แน่นอนซึ่งสอดคล้องกับข้อมูลหลายประเภทเหล่านี้

รูปต่อไปนี้แสดงให้เห็นถึงการประยุกต์ใช้ Polymorphism ใน Python เกี่ยวข้องกับฟังก์ชันที่สร้างขึ้น: –

ความแตกต่างในฟังก์ชัน

โปรแกรมต่อไปนี้ช่วยในการแสดงการประยุกต์ใช้ Polymorphism ใน Python: -

Python Code:

print ("The length of string Guru99 is ",len("Guru99"))
print("The length of list is ",len(["Guru99","Example","Reader"]))
print("The length of dictionary is ",len({"Website name":"Guru99","Type":"Education"}))

Output:

The length of string Guru99 is 6
The length of the list is 3
The length of the dictionary is 2

ความแตกต่างในฟังก์ชัน

ในตัวอย่างข้างต้น ฟังก์ชัน len() ของ Python ดำเนินการ Polymorphism สำหรับชนิดข้อมูลสตริง รายการ และพจนานุกรม ตามลำดับ

ความแตกต่างและการสืบทอด

การรับมรดกใน Python สามารถกำหนดเป็นแนวคิดการเขียนโปรแกรมโดยที่คลาสลูกกำหนดสืบทอดคุณสมบัติจากคลาสฐานอื่นที่มีอยู่ Python.

มีสองที่สำคัญ Python แนวคิดที่เรียกว่า การเขียนทับวิธีการ และการโอเวอร์โหลดวิธีการ

  • ในวิธีการโอเวอร์โหลด Python จัดเตรียมคุณลักษณะของการสร้างวิธีการที่มีชื่อเดียวกันเพื่อดำเนินการหรือดำเนินการฟังก์ชันต่างๆ ในโค้ดที่กำหนด อนุญาตให้โอเวอร์โหลดวิธีการและใช้เพื่อทำงานต่าง ๆ ในแง่ที่ง่ายกว่า
  • ในวิธีการเอาชนะ Python จะแทนที่ค่าที่มีชื่อคล้ายกันในคลาสหลักและคลาสย่อย

มาดูตัวอย่างของ Polymorphism และการสืบทอดดังต่อไปนี้:

Python Code:

class baseclass:
    def __init__(self, name):
    self.name = name
def area1(self):
    pass
def __str__(self):
    return self.name
class rectangle(baseclass):
    def __init__(self, length, breadth):
    super().__init__("rectangle")
self.length = length
self.breadth = breadth
def area1(self):
    return self.length * self.breadth
class triangle(baseclass):
    def __init__(self, height, base):
    super().__init__("triangle")
self.height = height
self.base = base
def area1(self):
    return (self.base * self.height) / 2
a = rectangle(90, 80)
b = triangle(77, 64)
print("The shape is: ", b)
print("The area of shape is", b.area1())
print("The shape is:", a)
print("The area of shape is", a.area1())

Output:

The shape is: a triangle
The area of a shape is 2464.0

The shape is: a rectangle
The area of a shape is 7200

ในโค้ดด้านบน วิธีการต่างๆ มีชื่อเดียวกันซึ่งกำหนดเป็นวิธีการ init และวิธี area1 จากนั้นวัตถุของคลาสสแควร์และสี่เหลี่ยมผืนผ้าจะถูกนำมาใช้เพื่อเรียกใช้ทั้งสองวิธีเพื่อทำงานที่แตกต่างกันและให้ผลลัพธ์ของพื้นที่สี่เหลี่ยมจัตุรัสและสี่เหลี่ยมผืนผ้า

ความหลากหลายด้วยวิธีการแบบคลาส

การขอ Python การเขียนโปรแกรมช่วยให้โปรแกรมเมอร์สามารถบรรลุความหลากหลายและวิธีการโอเวอร์โหลดด้วยวิธีคลาส ชั้นเรียนที่แตกต่างกันใน Python สามารถมีเมธอดที่ถูกประกาศด้วยชื่อเดียวกันข้ามได้ Python รหัส.

In Pythonสามารถกำหนดคลาสที่แตกต่างกันได้สองคลาส หนึ่งจะเป็นคลาสลูกและได้รับคุณลักษณะจากคลาสที่กำหนดอื่นที่เรียกว่าคลาสพาเรนต์

ตัวอย่างต่อไปนี้แสดงให้เห็นแนวคิดของ Polymorphism ด้วยวิธีการคลาส: –

Python Code:

class amazon:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print("This is product and am class is invoked. The name is {self.name}. This costs {self.price} rupees.")
class flipkart:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print(f "This is product and fli class is invoked. The name is {self.name}. This costs {self.price} rupees.")
FLP = flipkart("Iphone", 2.5)
AMZ = amazon("Iphone", 4)
for product1 in (FLP, AMZ):
    product1.info()

Output:

This is a product, and fli class is invoked. The name is iPhone, and this costs 2.5 rupees.
This is a product, and am class is invoked. The name is iPhone, and this costs 4 rupees.

ในโค้ดด้านบน มีคลาสที่แตกต่างกันสองคลาสที่มีชื่อว่า flipkart และ amazon ที่ใช้ชื่อเมธอด info และ init เดียวกันเพื่อให้ราคาผลิตภัณฑ์ที่เกี่ยวข้องและอธิบายแนวคิดของ Polymorphism เพิ่มเติม Python.

ความแตกต่างระหว่างเมธอดโอเวอร์โหลดและความหลากหลายเวลาคอมไพล์

ใน Polymorphism ของคอมไพล์ไทม์คอมไพเลอร์ของ Python โปรแกรมแก้ไขการโทร ความหลากหลายเวลาคอมไพล์ทำได้สำเร็จโดยวิธีการโอเวอร์โหลด

การขอ Python คอมไพเลอร์ไม่สามารถแก้ไขการเรียกระหว่างรันไทม์สำหรับความหลากหลาย นอกจากนี้ยังจัดเป็นวิธีการแทนที่โดยที่วิธีการเดียวกันมีลายเซ็นหรือคุณสมบัติที่คล้ายกัน แต่เป็นส่วนหนึ่งของคลาสที่แตกต่างกัน

คำถามที่พบบ่อย

เป็ดน้อยping ช่วยให้ Python จงตัดสินวัตถุจากเมธอดที่มันมีให้ มากกว่าประเภทคลาสของมัน ถ้าวัตถุมีเมธอดที่ต้องการ มันก็ใช้งานได้ ตามแนวคิดที่ว่า “ถ้ามันเดินเหมือนเป็ดและร้องเหมือนเป็ด มันก็คือเป็ด”

ไม่ใช่ตามธรรมเนียมดั้งเดิม เมื่อสองวิธีมีชื่อเดียวกัน คำจำกัดความสุดท้ายจะเป็นตัวที่ถูกนำมาใช้ Python แต่จะจำลองการโอเวอร์โหลดโดยใช้พารามิเตอร์เริ่มต้น พารามิเตอร์ *args ที่มีความยาวแปรผัน หรือตัวตกแต่ง functools.singledispatch เพื่อจัดการกับประเภทพารามิเตอร์ที่แตกต่างกันภายในฟังก์ชันเดียว

abstracคลาสพื้นฐาน t จากโมดูล abc ประกาศเมธอดที่คลาสย่อยทุกคลาสต้องนำไปใช้ คลาสเหล่านี้บังคับใช้ส่วนต่อประสานร่วมกัน ดังนั้นคลาสย่อยที่ไม่เกี่ยวข้องกันจึงสามารถใช้งานแบบโพลีมอร์ฟิกได้ Python รับประกันว่าแต่ละวิธีจะตรงตามข้อกำหนดที่ต้องการ

Polymorphism ช่วยเพิ่มความสามารถในการนำโค้ดกลับมาใช้ใหม่ ความยืดหยุ่น และความสามารถในการขยายขนาด ฟังก์ชันหรืออินเทอร์เฟซเดียวสามารถประมวลผลวัตถุได้หลายประเภท ซึ่งช่วยลดการซ้ำซ้อน ลดความซับซ้อนในการบำรุงรักษา และช่วยให้คุณสามารถเพิ่มคลาสใหม่ได้โดยไม่ต้องเขียนโค้ดใหม่ในส่วนที่ใช้งานคลาสเหล่านั้นอยู่แล้ว

ใช่ ผ่านทาง DuckTypingคลาสที่ไม่เกี่ยวข้องกันแต่มีการใช้งานเมธอดเดียวกัน สามารถใช้แทนกันได้โดยไม่ต้องมีคลาสแม่ร่วมกัน Operaการโอเวอร์โหลดของ tor และฟังก์ชันในตัว เช่น len() ยังช่วยให้เกิดโพลีมอร์ฟิซึมโดยไม่ต้องอาศัยการสืบทอด

ปรากฏการณ์โพลีมอร์ฟิซึมเกิดขึ้นเมื่อฟังก์ชันหนึ่งประมวลผลสตริง รายการ หรืออ็อบเจ็กต์แบบกำหนดเอง ในไดรเวอร์ฐานข้อมูลที่เปิดเผย API เดียวให้กับเอนจิ้นต่างๆ และในชุดเครื่องมือ GUI ที่วิดเจ็ตจำนวนมากใช้เมธอด draw() หรือ update() ร่วมกัน ซึ่งเรียกผ่านอินเทอร์เฟซเดียว

เฟรมเวิร์ก AI ขึ้นอยู่กับโพลีมอร์ฟิซึม ในภาษา PyTorch, ทุกโมเดลจะสืบทอดคลาสย่อย nn.Module และเขียนทับเมธอด forward(); ใน scikit-learn ตัวประมาณค่าจะใช้เมธอด fit() และ predict() ร่วมกัน ดังนั้นอัลกอริธึมต่างๆ จึงทำงานผ่านอินเทอร์เฟซที่สอดคล้องกันและสามารถแลกเปลี่ยนกันได้

ใช่แล้ว GitHub Copilot และผู้ช่วย AI ที่ทำหน้าที่คล้ายตัวแทนจะสร้างฟังก์ชันแบบ duck-typed และแนะนำ abstracสร้างคลาสพื้นฐาน t และปรับปรุงวิธีการที่ซ้ำซ้อนให้เป็นการออกแบบแบบโพลีมอร์ฟิกจากคำแนะนำสั้นๆ Revตรวจสอบผลลัพธ์เพื่อยืนยันว่าตรรกะและอินเทอร์เฟซถูกต้อง

สรุปโพสต์นี้ด้วย: