1. 程式人生 > 其它 >python的多型

python的多型

  1. 多型現象【+】【len】
# 【+】
num1 = 1
num2 = 2
print(num1+num2) # 3

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


# 【len】
print(len("nhooo"))                  # 5
print(len(["Python", "Java", "C"]))  # 3
print(len({"Name": "John", "Address": "Nepal"}))  # 2

  1. 類方法中的多型
cat1 = Cat("Kitty", 2.5)
dog1 = Dog("Fluffy", 4)

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

建立了兩個類Cat和Dog。它們具有相似的結構,並具有相同的方法名稱info()和make_sound()。
但是,請注意,我們還沒有建立公共的超類或以任何方式將這些類連結在一起。即使這樣,我們也可以將這兩個不同的物件打包到一個元組中,並使用一個公共animal變數對其進行迭代。由於多型性,這是允許的。
  1. 方法重寫
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)        # Circle
print(b.fact()) # 我是一個二維的形狀。
print(a.fact()) # 正方形的每個角都是90度。
print(b.area()) # 153.93804002589985


在這裡,我們可以看到在父類中使用了諸如__str __()之類的未在子類中重寫的方法。
由於多型性,Python直譯器自動識別出物件a(Square類)的fact()方法被重寫。它使用了在子類中定義的那個。
另一方面,由於物件b的fact()方法沒有被重寫,因此可以從Parent Shape類中使用它。