首页 > 其他分享 >面向对象之多态和鸭子类型

面向对象之多态和鸭子类型

时间:2024-01-13 23:36:53浏览次数:35  
标签:run Car self 多态 面向对象 鸭子 print class def

【一】多态

【1】什么是多态

  • 指一类事物有很多形态

【2】示例

  • 比如汽车是一类,它于很多形态,如 奔驰 宝马 奥迪
class Car:
    def run(self):
        print('开始跑')


class Benz(Car):
    def run(self):
        super().run()
        print('98加满')


class Bwm(Car):
    def run(self):
        super().run()
        print('别摸我')


class Audi(Car):
    def run(self):
        super().run()
        print('我是奥迪')

【3】为什么要用多态(多态的好处)

  • 增加了程序的灵活性
    • 以不变应万变,不论对象千变万化,使用者都是用同一种形式去调用的
  • 增加了程序的可拓展性
    • 通过继承Car类创建了一个新的类。
class Car:
    def run(self):
        print('开始跑', end='')


class Benz(Car):
    def run(self):
        super().run()
        print('98加满')


class Bwm(Car):
    def run(self):
        super().run()
        print('别摸我')


class Audi(Car):
    def run(self):
        super().run()
        print('我是奥迪')


car1 = Benz()
car2 = Bwm()
car3 = Audi()


def drive_car(obj):
    obj.run()

drive_car(car3)

【二】鸭子类型duck-typing

【1】什么是鸭子类型

  • 鸭子类型是一种编程风格,决定一个对象是否有正确接口
  • 它起源于国外的一个谚语 如果你走路摇摇晃晃像鸭子一样 而且 你长得像鸭子 叫声也像鸭子 那你就是一只鸭子
  • 比如在linux里面一切皆文件就是一种鸭子类型

【2】鸭子类型

class Disk:
    def read(self):
        print('Disk.read')

    def write(self):
        print('Disk.write')


class Memory:
    def read(self):
        print('Memory.read')

    def write(self):
        print('Memory.write')


class Txt:
    def read(self):
        print('Txt.read')

    def write(self):
        print('Txt.write')

标签:run,Car,self,多态,面向对象,鸭子,print,class,def
From: https://www.cnblogs.com/Hqqqq/p/17963202

相关文章

  • 面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以判断,取出和修改其本地状态或行为的能力在python中,反射主要是指通过字符串操作对象属性【2】Python中的反射同过字符串的形式操作对象相关的属性python一切皆为对象,都可以使用反射【二】反射方法【1】反射方法介绍getatt......
  • 面向对象之绑定方法和非绑定方法
    【一】绑定方法与非绑定方法介绍【1】绑定方法绑定给谁,谁调用就将谁作为第一个参数传入(1)绑定到类的方法使用classmethod装饰器来装饰将类作为第一个参数传入对象也可调用,会将实例化对象的类作为第一个参数传入(2)绑定到对象的方法通过对象.方法的方法实现,将对象作为......
  • 面向对象之元类
    【一】常用的魔法方法【1】初始化对象的属性__init__【二】元类【1】什么是元类一切源于一句话:Python中一切皆对象八大基本数据类型是对象类实例化得到的对象也是对象其实类本身也是一种对象classHuman:def__init__(self,name,age):self.name=name......
  • 面向对象之封装
    【一】面向对象三大特性面向对象编程有三大特性:封装、继承、多态其中最重要的一个特性就是封装。封装指的就是把数据与功能都整合到一起【1】什么是封装就是对具体对象的一种抽象简单理解就是把不想让别人看到的对象藏起来【2】为什么要封装有些敏感数据不想......
  • 什么是多态
    概念动态编译:类型:可扩展性即同一个方法可以根据发送对象的不同而采取不同的行为方式。一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)多态存在的条件有继承关系子类重写父类方法父类引用指向子类对象注意:多态是方法的多态,属性没有多......
  • 什么是面向对象
    面向过程&面向对象面向过程思想按顺序进行,线性思维步骤清晰简单,第一步做什么,第二步做什么……面对过程适合处理一些较为简单的问题面向对象思想属性加方法变成一个类物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最......
  • 多态和虚函数 [补档-2022-10-23]
    简述:  多态分为两类,一种是静态多态(如函数重载,运算符重载,复用函数名等)和动态多态(派生类和虚函数实现运行时的多态)  静态多态和动态多态的区别是:静态多态的函数地址早绑定,在编译阶段就确定了函数地址。动态多态的函数地址是晚绑定,即运行阶段确定函数地址。​多态的满......
  • Python面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以访问、检测和修改其本身状态或行为的能力。在Python中,反射主要指通过字符串的形式操作对象的属性。【2】Python中的反射通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)【二】反射方法......
  • Python面向对象之派生
    派生【一】概要"派生"(Derivation)是指在面向对象编程中,通过创建新的类,基于已有的类(通常称为父类或基类)来构建新的类,以获取和扩展父类的属性和方法。在这个过程中,新创建的类称为子类或派生类。通俗来讲,派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法【......
  • 面向对象的三大特性及派生和组合
    面向对象的三大特性面向对象编程有三大特性:封装、继承、多态-->派生和组合【一】封装【1】什么是封装在程序设计中,封装(Encapsulation)是对具体对象的一种抽象封装就是对具体对象的一种抽象简单理解就是将不想让别人看到的东西全部藏起来【2】为什么要封装封装数......