Python 基礎教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類型

Python 文件操作

Python 對象和類

Python 日期和時間

Python 高級知識

Python 參考手冊

Python 多態(tài)

在本教程中,我們將學習多態(tài),不同類型的多態(tài)以及如何借助示例演示在Python中實現(xiàn)它們。

什么是多態(tài)?

多態(tài)性的字面意思是指以不同形式出現(xiàn)的條件。

多態(tài)是編程中非常重要的概念。它指的是使用單個類型實體(方法,運算符或對象)來表示不同場景中的不同類型。

讓我們舉個實例:

示例1:加法運算符的多態(tài)

我們知道 + 運算符已在Python程序中廣泛使用。但是,它沒有單一用法。

對于整數(shù)數(shù)據(jù)類型,使用 + 運算符執(zhí)行算術加法運算。

num1 = 1
num2 = 2
print(num1+num2)

因此,以上程序輸出 3

類似地,對于字符串數(shù)據(jù)類型,使用 + 運算符進行連接。

str1 = "Python"
str2 = "Programming"
print(str1+" "+str2)

結果,以上程序輸出 : Python Programming

在這里,我們可以看到使用運算符 + 對不同的數(shù)據(jù)類型執(zhí)行了不同的操作。這是Python中最簡單的多態(tài)現(xiàn)象之一。

Python中的函數(shù)多態(tài)

Python中有一些函數(shù)可以與多種數(shù)據(jù)類型兼容。

其中一種這樣的函數(shù)是len()函數(shù)。它可以在Python中與許多數(shù)據(jù)類型一起運行。讓我們看一下該函數(shù)的一些示例用例。

示例2:多態(tài)len()函數(shù)

print(len("nhooo"))
print(len(["Python", "Java", "C"]))
print(len({"Name": "John", "Address": "Nepal"}))

輸出結果

5
3
2

在這里,我們可以看到許多數(shù)據(jù)類型(例如字符串,列表,元組,集合和字典)都可以使用len()函數(shù)。但是,我們可以看到它返回有關特定數(shù)據(jù)類型的特定信息。

功能多態(tài)性
Python中l(wèi)en()函數(shù)中的多態(tài)性

Python中的類多態(tài)

在面向對象編程中,多態(tài)是一個非常重要的概念。

要了解有關Python中OOP的更多信息,請訪問:Python面向對象編程

在創(chuàng)建類方法時,我們可以使用多態(tài)的概念,因為Python允許不同的類具有相同名稱的方法。

然后,我們可以稍后通過忽略正在使用的對象來概括調用這些方法。讓我們看一個實例:

示例3:類方法中的多態(tài)

class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print(f"我是一只貓。我的名字是 {self.name}. 我是 {self.age} 歲.")

    def make_sound(self):
        print("Meow")


class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print(f"我是一只狗。 我的名字是 {self.name}. 我是  {self.age} 歲.")

    def make_sound(self):
        print("Bark")


cat1 = Cat("Kitty", 2.5)
dog1 = Dog("Fluffy", 4)

for animal in (cat1, dog1):
    animal.make_sound()
    animal.info()
    animal.make_sound()

輸出結果

Meow
我是一只貓。我的名字是 Kitty. 我是 2.5 歲.
Meow
Bark
我是一只狗。 我的名字是 Fluffy. 我是  4 歲.
Bark

在這里,我們創(chuàng)建了兩個類Cat和Dog。它們具有相似的結構,并具有相同的方法名稱info()和make_sound()。

但是,請注意,我們還沒有創(chuàng)建公共的超類或以任何方式將這些類鏈接在一起。即使這樣,我們也可以將這兩個不同的對象打包到一個元組中,并使用一個公共animal變量對其進行迭代。由于多態(tài)性,這是允許的。

多態(tài)與繼承

與其他編程語言一樣,Python中的子類也從父類繼承方法和屬性。我們可以專門針對子類重新定義某些方法和屬性,這稱為Method Overriding(方法重寫)。

多態(tài)性使我們能夠訪問與父類同名的這些覆蓋的方法和屬性。

讓我們看一個實例:

示例4:方法重寫

from math import pi


class Shape:
    def __init__(self, name):
        self.name = name

    def area(self):
        pass

    def fact(self):
        return "我是一個二維的形狀。"

    def __str__(self):
        return self.name


class Square(Shape):
    def __init__(self, length):
        super().__init__("Square")
        self.length = length

    def area(self):
        return self.length**2

    def fact(self):
        return "正方形的每個角都是90度。"


class Circle(Shape):
    def __init__(self, radius):
        super().__init__("Circle")
        self.radius = radius

    def area(self):
        return pi*self.radius**2


a = Square(4)
b = Circle(7)
print(b)
print(b.fact())
print(a.fact())
print(b.area())

輸出結果

Circle
我是一個二維的形狀。
正方形的每個角都是90度。
153.93804002589985

在這里,我們可以看到在父類中使用了諸如__str __()之類的未在子類中重寫的方法。

由于多態(tài)性,Python解釋器自動識別出對象a(Square類)的fact()方法被重寫。它使用了在子類中定義的那個。

另一方面,由于對象b的fact()方法沒有被重寫,因此可以從Parent Shape類中使用它。

類多態(tài)
Python父類和子類中的多態(tài)

注意方法重載是一種無法在Python中創(chuàng)建具有相同名稱但參數(shù)不同的方法的方法。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清