首页 > 其他分享 >多态

多态

时间:2022-08-29 14:27:22浏览次数:43  
标签:self 多态 Animal print bark class def

python是一门动态语言,严格的来说python不存在多态。

def bark(animal):
    animal.bark()

上面的函数bark接收一个对象,并调用了对象的bark方法。对于python来说只要传入的对象有bark方法这个函数就可以执行,而不必去检查这个对象的类型。

class Animal:
    def bark(self):
        print('嗷嗷叫!')

class Dog(Animal):
    def bark(self):
        print('汪汪叫!')

class Cat(Animal):
    def bark(self):
        print('喵喵叫!')

class Duck(Animal):
    def bark(self):
        print('嘎嘎叫!')

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

bark(dog)
bark(cat)
bark(duck)

输出:

汪汪叫!
喵喵叫!
嘎嘎叫!

上面的案例中dogDog类型的一个实例,同时它也是Animal的一个实例。但是反过来不成立。

对于静态语言来说函数bark如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,不能调用bark

dogcatduck都是Animal类型,但是它们执行bark后的输出又各不相同。一个类型多种形态,这就是多态。

对于python这样的动态语言来说,则不需要传入的一定是Animal类型,只要它具有一个bark方法就可以了。

class SomeClass:
    def bark(self):
        print('随便叫!')
sc = SomeClass()
bark(sc)

输出:

随便叫!

标签:self,多态,Animal,print,bark,class,def
From: https://www.cnblogs.com/superwuchaofan/p/16635770.html

相关文章

  • 多态
    多态即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。一个对象的实际类型是确定的,但可以指向对象的引用的类型又=有很多(父类,有关系的类)多态存......
  • Java10-接口,多态
    第一章接口1.1概述接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK7......
  • C++之多态
    C++之多态1静态联编和动态联编C++支持编译时多态(静态多态)和运行时多态(动态多态)。运算符重载和函数重载就是编译时多态,而派生类和虚函数就是运行时多态。静态多态和动态......
  • Java-多态 抽象类 接口
    1.多态1.1多态的概述(记忆)什么是多态​ 同一个对象,在不同时刻表现出来的不同形态多态的前提要有继承或实现关系要有方法的重写要有父类引用指向子类对象1.2......
  • 多态
    0.多态在继承关系的前提下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不停的行为,这就叫做多态。在C#中体现多态的三种方式:虚方法、抽象类、接口。1、虚方法......
  • 面向对象——多态
    多态即同一方法可以根据发送对象的不同而采用不同的行为方式多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形......
  • 26、多态性与鸭子类型
    26、多态性与鸭子类型  多态与多态性多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪classAnimal:#同一类事物:动物deftalk(self)......
  • [Python学习笔记]Python基础-13 面向对象编程_继承和多态
    继承面向对象的编程有三大特性封装:函数是对语句的封装类是对函数和变量的封装继承类和类之间可以人为,手动的建立父子关系父类的属性和方法,子类可以使用......
  • Java面向对象—封装、继承、多态
    Java面向对象—封装、继承、多态在对面向对象的特征进行分析之前,先让我们来了解一下什么是面向对象。面向对象与面向过程:面向过程:是一种以过程为中心的编程思想,面向过程......
  • 《JavaStudy36》多态
     ......