欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

多态及多态性和鸭子类型

程序员文章站 2022-05-04 13:43:56
多态 什么是多态 指的是同一类/种事物的不同形态(其实就是继承关系的表现) 为何要用多态 多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象 多态性的精髓:统一 这就好比开奥迪车,宝马车和奇瑞qq,开的都是车,学开车不是学开某一辆车。 父类定义了,以后子类需要使用父类的功能,直 ......

多态

什么是多态

指的是同一类/种事物的不同形态(其实就是继承关系的表现)

 

为何要用多态

多态性:在多态的背景下,可以在不用考虑对象具体类型的前提下而直接使用对象

多态性的精髓:统一

这就好比开奥迪车,宝马车和奇瑞qq,开的都是车,学开车不是学开某一辆车。

父类定义了,以后子类需要使用父类的功能,直接使用.语法就行(写个例子)

class animal():
def sound(self):
print('1111')
def run(self):
print('run fast')

class mouse(animal):
def sound(self):
print('5555')

obj=mouse()
obj.run()

原理还是子类找不到就到父类中去找


导入abc模块,能够让子类强制执行父类的功能

import abc

class animal(metaclass=abc.abcmeta):

       @abc.abstractmethod   (强制子类有speak这个功能)

       def speak(self):

              pass

父类是用来建立规范的,不能用来实例化,更无须实现内部方法:animal()

import abc

class animal(metaclass=abc.abcmeta):
@abc.abstractmethod
def sound(self):
print('1111')
def run(self):
print('run fast')

class mouse(animal):
def sound(self):
print('5555')


res=mouse()
print(res.sound())

扩展(linux有一个统一思想----一切皆文件)

python崇尚鸭子类型

class duck():
  def walk(self):
    print('i walk like a duck')
  def swim(self):
    print('i swim like a duck')

class person():
  def walk(self):
    print('this one walk like a duck')
  def swim(self):
    print('this man swim like a duck')

例子二:

class disk:

    def read(self):

        print('disk read')

 

    def write(self):

        print('disk write')

 

class memory:

    def read(self):

        print('mem read')

 

    def write(self):

        print('mem write')

 

class cpu:

    def read(self):

        print('cpu read')

 

    def write(self):

        print('cpu write')

 

obj1=disk()

obj2=memory()

obj3=cpu()

 

obj1.read()

obj2.read()

obj3.read()

这只是一种格式规范,用来统一代码的格式