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类中使用它。