面向对象之多态与多态性(代码片段)

暮光微凉 暮光微凉     2022-10-27     766

关键词:

一、多态

  1、定义:指的是一类事物的多种形态,如水有液体、气体和固体三种形态, 动物有人、猫、狗等存在形态。

  2、示例:

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

import abc
class Animal(metaclass=abc.ABCMeta): # 同一类事物
    @abc.abstractmethod
    def eat(self):
        pass
class People(Animal): # 动物形态一:人
    def eat(self):
        print(people is eating)
class Dog(Animal): # 动物形态二:狗
    def eat(self):
        print(dog is eating)
class Cat(Animal): # 动物形态三:猫
    def eat(self):
        print(cat is eating)
person = People()
dog = Dog()
cat = Cat()

 

二、多态性

  1、定义:指的是可以在不考虑对象的类型的情况下而直接使用对象。

  2、多态性的类型可分为静态多态性和动态多态性。

    静态多态性:任何类型都可以用运算符+进行运算。

    动态多态性(通过示例来说明)

person = People()
dog = Dog()
cat = Cat()

#person、dog、cat都是动物,所以是动物肯定有eat方法
# 于是我们可以不用考虑它们三者的具体是什么类型,而可以直接使用

person.eat()
dog.eat()
cat.eat()

# 因此,更近一步,我们可以定义一个统一的接口来使用
# 动物类的通用方法,而不需要区分动物的形态种类,比如学开车,学了一种车,可以开奥迪、宝马等其他车,而不需要每个单独学

def  func(animal):
      animal.eat()   
func(person)
    

   3、多态性的好处 

  1、增加了程序的灵活性,以不变应万变,不论对象怎么变化,使用者都以同一种形式去调用,比如:func(animal)
  2、增加了程序的可扩展性,比如通过继承Animal类,使用者无需更改自己的代码,还是用func(animal)去调用   
# 通过继承Animal类创建一个新的类,使用者无需更改自身代码,仍然使用func(person)去调用

class Bird(Animal):  # 属于动物的另一种形态:鸟
    
    def  eat(self):
        print("I‘m eating")

def func(animal):  #对于使用者而言,自身代码无需更改
    animal.eat()

bird1 = Bird() # 实例出一只猫
func(bird1)  # 调用方式也无需改变,就能调用鸟的eat功能

‘‘‘
这样我们新增了一个形态Bird,由Bird类产生的实例Bird1,使用者可以在完全不需要修改自己代码的情况下。使用和人、狗、猫一样的方式调用bird1的eat方法,即func(bird1)
‘‘‘

 

三、鸭子类型

  1、鸭子类型:Python崇尚鸭子类型,即“如果看起来像,叫声像,而且走起路来像鸭子,那么它就是鸭子。”

   实例1:

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

class Textfile:
    def read(self):
        print(reading)
    def write(self):
        print(writing)
class Diskfile:
    def read(self):
        print(reading)
    def write(self):
        print(writing)
textfile = Textfile()
textfile.read()
diskfile = Diskfile()
diskfile.read()

    注意:尽管Textfile类和Diskfile类都没有继承内置文件对象的方法,但Textfile和Diskfile看起来都像是文件,因而都可以当作文件一样使用文件的read方法。

    示例2:

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

# list、tuple、str都是序列类型
l = list([1,2,3])
t = tuple((h,y,s,t))
s = str(ht514)

# 使用内置方法
print(l.__len__()) # 3
print(t.__len__()) # 4
print(s.__len__()) # 5

# 等同于下列自定义调用方法
def len(func):
    return func.__len__()
print(len(l)) # 3
print(len(t)) # 4
print(len(s)) # 5

# list、tuple、str没有继承同一个父类,但看起来都像序列,就都可以调用__len__()方法

 

第九篇:面向对象之多态与封装(代码片段)

一多态多态指的是一类事物有多种形态动物有多种形态:人,狗,猪(咳咳~人也是猴子进化来的,不允许反驳) importabcclassAnimal(metaclass=abc.ABCMeta):#同一类事物:动物@abc.abstractmethoddeftalk(self):passclassPeople(Animal):#动物的形态之一... 查看详情

重新认识java----面向对象之多态(向上转型与向下转型)(代码片段)

多态,大概每个人都知道。但是,又有几个人真的理解什么是多态、多态有哪些细节呢?如果你看到这篇文章的名字,脑海中对多态没有一个清晰的概念,不妨点进来看看,也许会有收获。什么是多态简单... 查看详情

面向对象之多态(代码片段)

...物类吗?没错,多态在程序中的表现形式就是依赖于继承多态性那多态到底有什么特性呢?多态性指的是可以在不用考虑对象具体类型的前提下,直接使用对象下的方法,也就是说,继承同一个类的多个子类有相同的方法名,那... 查看详情

5_面向对象-中之面向对象的特征三:多态性(代码片段)

1.多态性的理解:可以理解为一个事物的多种形态。2.何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)举例:Personp=newMan();Objectobj=newDate();3.多态性的使用:虚拟方法调用  >有了对象... 查看详情

java面向对象之多态(代码片段)

...态的实现3.小结 1.多态的含义       多态,是Java面向对象的三大特性之一,使用之地特别广泛。那么什么是多态呢?多态是同一个行为具有多个不同表现形式或形态的能力。比如炒菜这个行为在不同厨师身上会产... 查看详情

java面向对象之多态(代码片段)

...态的实现3.小结 1.多态的含义       多态,是Java面向对象的三大特性之一,使用之地特别广泛。那么什么是多态呢?多态是同一个行为具有多个不同表现形式或形态的能力。比如炒菜这个行为在不同厨师身上会产... 查看详情

面向对象三大特性之封装与多态(代码片段)

一、封装最主要的作用:隐藏对象的属性和实现细节,仅对外提供公共访问方式封装原则将不需要对外提供的内容都隐藏起来把属性都隐藏,提供公共方法对其访问在python中用双下划线开头的方式将属性隐藏起来(设置成私有的... 查看详情

java面向对象三大特征之继承和多态(代码片段)

...转型多态代码案例总结前言  上一篇博客我们介绍了Java面向对象思想以及三大特征之一的封装。本文将介绍面向对象三大特征的剩下两个特征——继承和多态,我个人认为继承和多态是三个特征中比较重要且理解起来稍有... 查看详情

面向对象的三大特性之多态(代码片段)

#面向对象的三大特性之多态#多态由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同#多态的概念指出了对象如何通过他们的属性和动作来操作及访问,而不需要考虑他们具体的类#多态表明了动态(运行时)绑定... 查看详情

python面向对象之多态(代码片段)

多态第一阶段:判断一个变量是否是某个类型可以用isinstance()判断classAnimal(object):defrun(self):print("Animalisrunning")classDog(Animal):defrun(self):print("Dogisrunning")classCat(Animal):defrun(self):print 查看详情

面向对象之多态多态性(代码片段)

一多态二多态性一多态多态指的是一类事物有多种形态动物有多种形态:人,狗,猪importabcclassAnimal(metaclass=abc.ABCMeta):#同一类事物:动物@abc.abstractmethoddeftalk(self):passclassPeople(Animal):#动物的形态之一:人deftalk(self):print(‘sayhello‘)clas... 查看详情

java中面向对象三大特性之——多态(代码片段)

多态的概述: 多态是继封装、继承之后,面向对象的第三大特性。生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的... 查看详情

面向对象之多态,多态性,反射,以及基于反射的可拔插设计(代码片段)

多态什么多态?多态指的是一类事物有多种形态,比如动物有多种形态:人,狗,猪>>例如importabc#创建抽象类导入abcclassAnimal(metaclass=abc.ABCMeta):#同一类事物:动物@abc.abstractmethod#归一化设计deftalk(self):passclassPeople(Animal):#动物的... 查看详情

面向对象三大特征之多态(代码片段)

面向对象的三大特征:封装、继承、多态。今天重点来看一下“多态”。封装  指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。将属性或方法进行封装,防止外部程序随机访问,加强代码的安全性。继承&n... 查看详情

java基础8---面向对象之多态抽象类接口(代码片段)

一、多态polymorphic1.多态的前提要有继承关系。要有方法重写。要有父类引用指向子类对象。2.多态中的成员访问特点1)成员变量编译看左边(父类),运行看左边(父类)。//多态:成员变量的访问publicclassPolymorphic_Demopubli... 查看详情

golang如何体现面向对象三大特征之多态?(代码片段)

...多态数组基本介绍变量(实例)具有多种形态。面向对象的三大特征,在Go语言,多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。快速入门在前面的Usb接口... 查看详情

面向对象之封装与多态

一、多态1.多态多态指的是一类事物有多种形态水有多种形态:冰水雾水动物有多种形态:人,狗,猪importabcclassAnimal(metaclass=abc.ABCMeta):#同一类事物:动物@abc.abstractmethoddeftalk(self):passclassPeople(Animal):#动物的形态之一:人deftalk(self):pr... 查看详情

面向对象之组合封装多态性鸭子类型(代码片段)

一、组合1.什么是组合一个对象的属性是来自于另外一个类的对象,称之为组合2.为何用组合组合也是用来解决类与类代码冗余的问题3.如何用组合#classFoo:#aaa=1111#def__init__(self,x,y):#self.x=x#self.y=y##deffunc1(self):#print(‘Foo内的功能‘)###c... 查看详情