12.5 多态与多态性

12.5 多态与多态性

  • 多态:一种事物有多种形态,只要大家都能继承A,那么这些东西就是A的多态
  • 水:固态/液态/气态
  • 动物:人/狗/猫
class Animal:
    def __init__(self,height,weight):
        self.height=height
        self.weight=weight


class People(Animal):
    def speak(self):
        print('speak')
peo=People(185,140)

class Dog(Animal):
    def bark(self):
        print('wangwangwang!')
        
dog=Dog(50,100)

class Cow(Animal):
    def mou(self):
        print('mowmow')
cow=Cow(100,200)

peo.speak()
dog.bark()
cow.mou() 

#这样很麻烦,引入多态
speak
wangwangwang!
mowmow
import abc 

class Animal(metaclass=abc.ABCMeta): 
    def __init__(self, name, height, weight):
        self.height = height
        self.weight = weight
        self.name = name

    @abc.abstractmethod  # 加装饰器, 固定必须写speak、eat ,不推荐使用 。
    def speak(self):
        print(self.name, '叫')

    @abc.abstractmethod
    def eat(self):
        print(self.name, '吃')


class People(Animal):
    def speak(self):
        print('speak')

    def eat(self):
        print(self.name, '吃饭')


class Dog(Animal):
    def speak(self):
        print('wangwangwang!')
    def eat(self):

        print(self.name,'吃狗粮')


class Cow(Animal):
    def speak(self):
        print('mowmow')
    def eat(self):
        
        print(self.name,'吃草')
    def eat1():
        pass


peo = People('peo', 185, 140)

dog = Dog('dog', 50, 100)

cow = Cow('cow', 100, 200)

peo.speak()
dog.speak()
cow.speak()
peo.eat()
dog.eat()
cow.eat()


speak
wangwangwang!
mowmow
peo 吃饭
dog 吃狗粮
cow 吃草
  • 鸭子类型,叫声像鸭子,长相像鸭子,就是鸭子,只要有speak和eat这两个方法那就是动物类
  • 对于这个例子,只要有speak方法/有eat方法,无论怎么定义这个类都是动物的一种形态
def func(obj):
    #多态性的使用,提供接口
    #接口就是函数
    obj.eat()
    # obj.sleep()
    # obj.walk()

func(dog) #传入不同的对象,同一种技能有不同的表现形式。
func(cow)
dog 吃狗粮
cow 吃草
posted @ 2025-09-08 19:57  bokebanla  阅读(10)  评论(0)    收藏  举报