zoukankan      html  css  js  c++  java
  • 面向对象的三大特征之一:多态性

    一 多态:

    多态指的是一类事物有多种形态。一般是抽象的形式,它们之间是继承的关系。

    import abc
    class Animal(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def run(self):
            pass
        @abc.abstractmethod
        def eat(self):
            pass
    
    class People(Animal):
        def run(self):
            print('People is walking')
    
        def eat(self):
            print('People is eating ')
    
    
    class People(Animal):
        def run(self):
            print('People is walking')
    
        # def eat(self):
        #     print('People is eating ')
    
    
    class Pig(Animal):
        def run(self):
            print('Pig is walking')
    
        def eat(self):
            print('Pig is eating ')

    分析总结:从上面的代码中可以看出,Animal有三种形态,分别是,人,狗,猪。而且也体现了都是继承的关系‘猪是动物’。。。。

     多态性

    (1)什么是多态性(注意:多态与多态性是两种概念)

    多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。总而言之就是在不考虑对象的类型的情况下直接使用对象。

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

    class Cat(Animal):
        def run(self):
            print('say miaomiao')
    
    
    def fun(obj):
        obj()
    
    cat1=Cat()

    Cat类是在上面的类型中新添加的,但同样可以直接使用fun():

    鸭子理论

    python是一种多态语言,崇尚鸭子类型。

    “鸭子测试”可以这样表述:

    “当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

    在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

    class TDisk: 
        def read(self):
            print('Disk read')
     
    class Text: 
        def read(self):
            print('Text read')
    
    disk1=Disk()
    text1=Text()
    text.read()
    disk.read()

    两个类型不一样,但它们都有相似的方法。

    序列类型:列表list,元组tuple, 字符串str

    l=list([1,2,3])

    t=tuple(('q','b'))

    s=str('hello')

    print(l.__len__())

    print(t.__len__())

    print(s.__len__())

    只要是序列类型都可以使用

  • 相关阅读:
    用户场景描述
    个人工作总结(第一阶段)
    个人进度报告
    《构建之法》阅读笔记05
    《构建之法》阅读笔记04
    《构建之法》阅读笔记03
    2020寒假学习(14)
    2020寒假学习(13)
    2020寒假学习(12)
    2020寒假学习(11)
  • 原文地址:https://www.cnblogs.com/z18271397173/p/9130602.html
Copyright © 2011-2022 走看看