python面向对象之多态

多态

第一阶段:判断一个变量是否是某个类型可以用isinstance()判断

class Animal(object):
    def run(self):
        print("Animal is running")

class Dog(Animal):
    def run(self):
        print("Dog is running")

class Cat(Animal):
    def run(self):
        print("Cat is running")

a = list() # a是list类型
b = Animal() # b是Animal类型
c = Dog() # c是Dog类型

>>> isinstance(a, list)
True
>>> isinstance(b, Animal)
True
>>> isinstance(c, Dog)
True

阶段二:Dog是Animal的子类,那么c是否也算是Animal数据类型了?答案是肯定的,那么这个现象又说明了什么问题?

>>> isinstance(c, Animal)
True

只要子类继承自父类,子类和父类的类型相同。

阶段三:写函数,用来驱赶dog和cat,然后让dog和cat跑起来,应该如何做?

# 正常的情况下:

class Animal(object):
    def run(self):
        print("Animal is running")

class Dog(Animal):
    def run(self):
        print("Dog is running")

class Cat(Animal):
    def run(self):
        print("Cat is running")

def testDrive_out_dog(dog):
    print("驱赶dog")
    dog.run()

def Drive_out_cat(cat):
    print("驱赶cat")
    cat.run()

testDrive_out_dog(Dog())
Drive_out_cat(Cat())

第四阶段:对于上面的方法**,如果我有一万种动物需要驱赶,难道我也要写一万个驱赶函数吗?NO

class Animal(object):
    def run(self):
        print("Animal is running")

class Dog(Animal):
    def run(self):
        print("Dog is running")

class Cat(Animal):
    def run(self):
        print("Cat is running")

def Drive_out_animal(animal):
    print(f"驱赶animal")
    animal.run()

Drive_out_animal(Dog())
Drive_out_animal(Cat())

其实我们只需要传入对象即可,因为dog和cat都有自己的run()方法。这就是多态。对于使用者来说,自己的代码根本无需改动,只需要拥有run()方法即可。

原文地址:https://www.cnblogs.com/plf-Jack/p/11053098.html

时间: 2024-11-06 07:16:29

python面向对象之多态的相关文章

Python面向对象特性 - 多态

Python中的多态 多态 多态指的是一类事物有多种形态.多态的实现需要依赖于继承~ import abc class File(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): pass @abc.abstractmethod def write(self): pass class Txt(File): # 文本数据的读写 def read(self): print('读取文本数据') def write(self): pr

Python 面向对象 组合-多态与多态性-封装-property

面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 1 class Foo: 2 xxx = 111 3 4 class Bar: 5 yyy = 222 6 7 obj = Foo() 8 obj.attr = Bar() 9 10 print(obj.xxx) 11 >>>111 12 print(obj.attr.yyy) 13 >>>222 2.为何要用组合 通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式

python面向对象:多态与多态性

多态 多态指的是一类事物有多种形态,比如 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(self): pr

Python面向对象之类的封装、继承与多态

Python面向对象中类的三大特性,即封装.继承与多态,同时也是所有语言在面向对象编程中的重要特性,下面用实际的代码部分针对每一种特性做出说明. 一.封装 顾名思义,封装即把我们想要的内容封装到某个地方,因此在这里记录两个问题,一是如何封装.二是如何调用封装的内容. 1.封装数据 class Company:     def __init__(self, dept, leader):         self.dept = dept         self.leader = leader   

Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认清楚?个

19.Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要 的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认 清楚

python 30 面向对象之 多态

目录 1,mixins机制 2,子类派生的新方法中重用父类的功能 3, 面向对象之--多态 4,一些内置函数的介绍 1,mixins机制 多继承的正确打开方式:mixins机制 mixins机制核心:就是在多继承背景下尽可能地提升多继承的可读性 ps:让多继承满足人的思维习惯=>什么"是"什么 使用Mixin类实现多重继承要非常小心 首先它必须表示某一种功能,而不是某个物品,python 对于mixin类的命名方式一般以 Mixin, able, ible 为后缀 其次它必须责任

python面向对象之继承/多态/封装

老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(self,name,speed,load,power): self.name = name self.speed = speed self.load = load self.power = power def run(self): print("开动啦.") class Benz(Vehicle

Python面向对象(2)

1.除了封装,Python面向对象还有继承这一功能,如下代码,这是简单的继承功能. class Animal: def chi(self): print(self.name+' 吃') def he(self): print(self.name + ' 喝') class Cat: def __init__(self, name): self.name = name def jiao(self): print('瞄') class Dog(Animal):#继承Animal这个父类,拥有父类的方