Python 中的多态性

多态性这个词意味着有多种形式。在编程中,多态性意味着相同的函数名称(但不同的签名)用于不同的类型。主要区别在于函数中使用的数据类型和参数数量。

内置多态函数的示例:

# 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/

(0)
上一篇 2023年9月26日
下一篇 2023年9月26日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注