多态

多态

指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活度。

代码

#!/usr/bin/env python

class Duck:
    def who(self):
        print("I am a duck")
        
class Dog:
    def who(self):
        print("I am a dog")
        
class Cat:
    def who(self):
        print("I am a cat")
        
duck = Duck()
dog = Dog()
cat = Cat()

duck.who()
dog.who()
cat.who()

运行结果

┌──(root㉿kali)-[~/python_code/python_3]
└─# python pet.py
I am a duck
I am a dog
I am a cat

思考一下以上的代码实现多态了吗?

答案:没有,因为多态要基于继承,要依赖于继承,上面的代码没有继承关系。

正确示例

#!/usr/bin/env python

class Animal(object):
    def who(self):
        print("I am an animal")
        
class Duck(Animal):
    def who(self):
        print("I am a duck")
        
class Dog(Animal):
    def who(self):
        print("I am a dog")
        
class Cat(Animal):
    def who(self):
        print("I am a cat")
        
duck = Duck()
dog = Dog()
cat = Cat()

duck.who()
dog.who()
cat.who()

运行结果

┌──(root㉿kali)-[~/python_code/python_3]
└─# python pet_polymorphism.py
I am a duck
I am a dog
I am a cat

实际开发中我们不会像上面那么写

实际开发会这么写

#!/usr/bin/env python

class Animal(object):
    def who(self):
        print("I am an animal")
        
class Duck(Animal):
    def who(self):
        print("I am a duck")
        
class Dog(Animal):
    def who(self):
        print("I am a dog")
        
class Cat(Animal):
    def who(self):
        print("I am a cat")

def func(obj):
    obj.who()

duck = Duck()
dog = Dog()
cat = Cat()

func(duck)
func(dog)
func(cat)

运行结果

┌──(root㉿kali)-[~/python_code/python_3]
└─# python pet_polymorphism.py
I am a duck
I am a dog
I am a cat

定义一个函数接收对象类型的参数,里面调用who()方法,这样不管方法内部实现细节如何,都可以使用统一接口进行调用,增加了代码的灵活性以及可扩展性。

posted on 2025-06-23 19:27  burgess0x  阅读(9)  评论(0)    收藏  举报