📅  最后修改于: 2020-04-07 09:10:57             🧑  作者: Mango
什么是多态:多态一词意味着具有多种形式。在编程中,多态意味着相同的函数名称(但签名不同)被用于不同目的。
内置多态函数示例:
# Python展示内置多态函数
# len()被使用在string上
print(len("芒果"))
# len()在list上被使用
print(len([10, 20, 30]))
输出:
5
3
使用的已定义多态函数的示例:
# Python函数展示多态
def add(x, y, z = 0):
return x + y+z
# 测试函数
print(add(2, 3))
print(add(2, 3, 4))
输出:
5
9
具有类方法的多态性:
下面的代码显示Python如何以相同的方式使用两种不同的类类型。我们创建一个for循环,该循环遍历对象的元组。然后调用方法而不必担心每个对象是哪种类类型。我们假设这些方法实际上存在于每个类中。
class China():
def capital(self):
print("北京是中国首都.")
def language(self):
print("在成都大家说四川话.")
def type(self):
print("中国是发展中国家.")
class USA():
def capital(self):
print("华盛顿特区是美国首都.")
def language(self):
print("在美国大家讲美式英语.")
def type(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("鸵鸟不能飞.")
obj_bird = Bird()
obj_spr = sparrow()
obj_ost = ostrich()
obj_bird.intro()
obj_bird.flight()
obj_spr.intro()
obj_spr.flight()
obj_ost.intro()
obj_ost.flight()
输出:
有很多种类的鸟.
大部分鸟能飞,有些不能.
有很多种类的鸟.
麻雀可以飞.
有很多种类的鸟.
鸵鸟不能飞.
具有函数和对象的多态性:
也可以创建可以接受任何对象的函数,从而实现多态性。在此示例中,让我们创建一个名为“ func()”的函数,该函数将使用一个名为“ obj”的对象。尽管我们使用的名称是“ obj”,但是任何实例化的对象都可以被调用到该函数中。接下来,让函数使用我们传递给它的’obj’对象来做些事情。在这种情况下,让我们调用三种方法,即capital(),language()和type(),它们分别在“China”和“USA”两个类中定义。接下来,让我们创建“China”和“USA”类的实例化(如果我们还没有的话)。有了这些,我们可以使用相同的func()函数调用它们的动作:
def func(obj):
obj.capital()
obj.language()
obj.type()
obj_ind = China()
obj_usa = USA()
func(obj_ind)
func(obj_usa)
代码:使用函数实现多态
class China():
def capital(self):
print("北京是中国首都.")
def language(self):
print("在成都大家说四川话.")
def type(self):
print("中国是发展中国家.")
class USA():
def capital(self):
print("华盛顿特区是美国首都.")
def language(self):
print("在美国大家讲美式英语.")
def type(self):
print("美国是发达国家.")
def func(obj):
obj.capital()
obj.language()
obj.type()
obj_ind = India()
obj_usa = USA()
func(obj_ind)
func(obj_usa)
输出:
北京是中国首都.
在成都大家说四川话.
中国是发展中国家.
华盛顿特区是美国首都.
在美国大家讲美式英语.
美国是发达国家.