📜  Python中的多态

📅  最后修改于: 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)

输出:

北京是中国首都.
在成都大家说四川话.
中国是发展中国家.
华盛顿特区是美国首都.
在美国大家讲美式英语.
美国是发达国家.