Python pipPython 字典理解
Python 多态
在本教程中,我们将学习多态,不同类型的多态以及如何借助示例演示在Python中实现它们。
什么是多态?多态性的字面意思是指以不同形式出现的条件。
多态是编程中非常重要的概念。它指的是使用单个类型实体(方法,运算符或对象)来表示不同场景中的不同类型。
让我们举个实例:
示例1:加法运算符的多态我们知道 + 运算符已在Python程序中广泛使用。但是,它没有单一用法。
对于整数数据类型,使用 + 运算符执行算术加法运算。
示例num1 = 1
num2 = 2
print(num1+num2)因此,以上程序输出 3
类似地,对于字符串数据类型,使用 + 运算符进行连接。
示例str1 = "Python"
str2 = "Programming"
print(str1+" "+str2)结果,以上程序输出 : Python Programming
在这里,我们可以看到使用运算符 + 对不同的数据类型执行了不同的操作。这是Python中最简单的多态现象之一。
Python中的函数多态Python中有一些函数可以与多种数据类型兼容。
其中一种这样的函数是len()函数。它可以在Python中与许多数据类型一起运行。让我们看一下该函数的一些示例用例。
示例2:多态len()函数示例print(len("nhooo"))
print(len(["Python", "Java", "C"]))
print(len({"Name": "John", "Address": "Nepal"}))输出结果
5
3
2在这里,我们可以看到许多数据类型(例如字符串,列表,元组,集合和字典)都可以使用len()函数。但是,我们可以看到它返回有关特定数据类型的特定信息。
Python中len()函数中的多态性Python中的类多态在面向对象编程中,多态是一个非常重要的概念。
要了解有关Python中OOP的更多信息,请访问:Python面向对象编程
在创建类方法时,我们可以使用多态的概念,因为Python允许不同的类具有相同名称的方法。
然后,我们可以稍后通过忽略正在使用的对象来概括调用这些方法。让我们看一个实例:
示例3:类方法中的多态示例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在这里,我们创建了两个类Cat和Dog。它们具有相似的结构,并具有相同的方法名称info()和make_sound()。
但是,请注意,我们还没有创建公共的超类或以任何方式将这些类链接在一起。即使这样,我们也可以将这两个不同的对象打包到一个元组中,并使用一个公共animal变量对其进行迭代。由于多态性,这是允许的。
多态与继承与其他编程语言一样,Python中的子类也从父类继承方法和属性。我们可以专门针对子类重新定义某些方法和属性,这称为Method Overriding(方法重写)。
多态性使我们能够访问与父类同名的这些覆盖的方法和属性。
让我们看一个实例:
示例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 __()之类的未在子类中重写的方法。
由于多态性,Python解释器自动识别出对象a(Square类)的fact()方法被重写。它使用了在子类中定义的那个。
另一方面,由于对象b的fact()方法没有被重写,因此可以从Parent Shape类中使用它。
Python父类和子类中的多态注意:方法重载是一种无法在Python中创建具有相同名称但参数不同的方法的方法。
Python pipPython 字典理解