多态

一种接口,多种实现

最初我们写类是这样调用的

class Animal(object):
    def __init__(self, name):
        self.name = name

    def talk(self):
        pass


class Cat(Animal):
    def talk(self):
        print('Meow!')


class Dog(Animal):
    def talk(self):
        print('Woof! Woof!')


d = Dog("杰克")
d.talk()
c = Cat("叶良辰")
c.talk()

结果:

Woof! Woof!
Meow!

这样也是一种多态

class Animal(object):
    def __init__(self, name):
        self.name = name

    def talk(self):
        pass


class Cat(Animal):
    def talk(self):
        print('Meow!')


class Dog(Animal):
    def talk(self):
        print('Woof! Woof!')


def animal_talk(obj):
    obj.talk()


d = Dog("杰克")
c = Cat("叶良辰")
animal_talk(c)
animal_talk(d)

结果:

Meow!
Woof! Woof!

最终的多态

class Animal(object):
    def __init__(self, name):
        self.name = name

    def talk(self):
        pass


    @staticmethod  # 静态方法
    def animal_talk(obj):  # 静态方法下这里不需要self
        obj.talk()


class Cat(Animal):
    def talk(self):
        print('Meow!')


class Dog(Animal):
    def talk(self):
        print('Woof! Woof!')


d = Dog("杰克")
c = Cat("叶良辰")
Animal.animal_talk(c)  # 调用了Animal下的    animal_talk方法,将c传给,animal_talk又调用了Dog下的talk(),相当于c.talk()
Animal.animal_talk(d)

结果:

Meow!
Woof! Woof!

练习题

class Parent():

    def func(self):
        print("in parent func")

    def __init__(self):
        self.func()


class Son(Parent):
    def func(self):
        print("in son func")


s = Son()

结果:

in son func
点击查看

相关文章:

  • 2021-07-11
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
  • 2021-12-31
  • 2021-04-29
  • 2021-12-05
  • 2022-12-23
猜你喜欢
  • 2021-10-02
  • 2021-12-05
  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-22
  • 2021-07-12
相关资源
相似解决方案