多态性这个词意味着有多种形式。在编程中,多态性意味着相同的函数名称(但不同的签名)用于不同的类型。主要区别在于函数中使用的数据类型和参数数量。
内置多态函数的示例:
# Python程序演示内置多态函数
# 对字符串使用len()
print(len("geeks"))
# 对列表使用len()
print(len([10, 20, 30]))
输出:
5
3
以上代码演示了内置的多态函数 len() 的用法。它可以用于不同类型的对象,包括字符串和列表,以返回它们的长度。
用户定义的多态函数的示例:
# 一个简单的Python函数演示多态性
def add(x, y, z=0):
return x + y + z
# 主程序
print(add(2, 3))
print(add(2, 3, 4))
以上代码演示了多态性的概念。函数 add 可以接受两个或三个参数,并返回它们的和。这意味着它具有多态性,因为它可以应对不同数量的参数。
输出:
5
9
类方法的多态性:
下面的代码显示了 Python 如何以相同的方式使用两种不同的类类型。我们创建一个 for 循环来迭代对象元组。然后调用这些方法,而不必关心每个对象是什么类型。我们假设这些方法实际上存在于每个类中。
class 印度():
def 首都(self):
print("新德里是印度的首都。")
def 语言(self):
print("印地语是印度使用最广泛的语言。")
def 类型(self):
print("印度是一个发展中国家。")
class 美国():
def 首都(self):
print("华盛顿特区是美国的首都。")
def 语言(self):
print("英语是美国的主要语言。")
def 类型(self):
print("美国是一个发达国家。")
obj_ind = India()
obj_usa = USA()
for country in (obj_ind, obj_usa):
country.capital()
country.language()
country.type()
输出:
新德里是印度的首都。
印地语是印度使用最广泛的语言。
印度是一个发展中国家。
华盛顿特区是美国的首都。
英语是美国的主要语言。
美国是一个发达国家。
多态性与继承:
在Python中,多态性允许我们在子类中定义与父类中的方法同名的方法。在继承中,子类继承父类的方法。但是,可以修改子类中从父类继承的方法。这在从父类继承的方法不太适合子类的情况下特别有用。在这种情况下,我们在子类中重新实现该方法。在子类中重新实现方法的过程称为方法重写。
class Bird:
def intro(self):
print("有许多种类的鸟。")
def flight(self):
print("大多数鸟类能够飞行,但有些不能。")
class Sparrow(Bird):
def flight(self):
print("麻雀能够飞行。")
class Ostrich(Bird):
def flight(self):
print("鸵鸟不能飞行。")
bird_obj = Bird()
sparrow_obj = Sparrow()
ostrich_obj = Ostrich()
bird_obj.intro()
bird_obj.flight()
sparrow_obj.intro()
sparrow_obj.flight()
ostrich_obj.intro()
ostrich_obj.flight()
输出:
有很多种类的鸟。
大多数鸟能飞行,但有些不能。
鸟类有很多种。
麻雀会飞行。
有很多种类的鸟。
鸵鸟不能飞行。
函数和对象的多态性:
还可以创建一个可以接受任何对象的函数,从而允许多态性。在这个例子中,让我们创建一个名为“func()”的函数,它将接受一个我们命名为“obj”的对象。尽管我们使用名称“obj”,但任何实例化的对象都可以调用此函数。接下来,让我们使用传递给它的“obj”对象为函数指定一些操作。在本例中,我们调用三个方法,即 Capital()、language() 和 type(),每个方法都在“India”和“USA”两个类中定义。接下来,如果我们还没有“印度”和“美国”类的实例,那么让我们创建它们。有了这些,我们可以使用相同的 func() 函数来调用它们的操作:
def func(obj):
obj.capital()
obj.language()
obj.type()
obj_ind = India()
obj_usa = USA()
func(obj_ind)
func(obj_usa)
代码:用函数实现多态性
class India():
def capital(self):
print("New Delhi is the capital of India.")
def language(self):
print("Hindi is the most widely spoken language of India.")
def type(self):
print("India is a developing country.")
class USA():
def capital(self):
print("Washington, D.C. is the capital of USA.")
def language(self):
print("English is the primary language of USA.")
def type(self):
print("USA is a developed country.")
def func(obj):
obj.capital()
obj.language()
obj.type()
obj_ind = India()
obj_usa = USA()
func(obj_ind)
func(obj_usa)
输出:
New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
India is a developing country.
Washington, D.C. is the capital of USA.
English is the primary language of USA.
USA is a developed country.
多态性的简单例子:
Python 中的多态性使用继承和方法重写:
class Animal:
def speak(self):
raise NotImplementedError("子类必须实现这个方法")
class Dog(Animal):
def speak(self):
return "汪汪!"
class Cat(Animal):
def speak(self):
return "喵喵!"
# 创建一个 Animal 对象的列表
animals = [Dog(), Cat()]
# 调用每个对象的 speak 方法
for animal in animals:
print(animal.speak())
输出:
汪汪!
喵喵!
以上代码定义了一个基类 Animal,并要求其子类实现 speak 方法。然后创建了 Dog 和 Cat 两个子类,并通过列表调用了它们的 speak 方法。
原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/python-polymorphism/