多态
多态
指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活度。
代码
#!/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()方法,这样不管方法内部实现细节如何,都可以使用统一接口进行调用,增加了代码的灵活性以及可扩展性。
浙公网安备 33010602011771号