zoukankan      html  css  js  c++  java
  • 3.1python多态与多态性

    #一、多态
    #多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)
    #1.序列类型有多种形态:字符串,列表,元组
    #2.动物有多种形态:人,狗,猪

    #装载自:https://www.cnblogs.com/luchuangao/p/6739557.html

    #多态的概念是应用于java和c#这类强类型语音中,而python崇尚‘鸭子类型’(弱类型语言)
    #所谓多态,定义时的类型和运行时的类型不一样,此时就成为多态
    #*python伪代码实现Java或c#的多态
    #pyhon鸭子类型
    # 多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度)
    class Animal:
        def run(self):
            raise AttributeError('子类必须实现这个方法')
    
    
    class People(Animal):
        def run(self):
            print('人正在走')
    
    
    class Pig(Animal):
        def run(self):
            print('pig is walking')
    
    
    class Dog(Animal):
        def run(self):
            print('dog is running')
    
    
    peo1 = People()
    pig1 = Pig()
    d1 = Dog()
    
    peo1.run()
    pig1.run()
    d1.run()
    #二 多态性
    #(1)什么是多态性(注意:多态与多态性是两种概念)
    #多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。
    # 在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。
    # 也就是说,每个对象可以用自己的方式去响应共同的消息。
    # 所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
    # 多态性:一种调用方式,不同的执行效果(多态性)

    # 多态性依赖于:继承
    ##!!!!综合来说:多态性:定义统一的接口,一种调用方式,不同的执行效果(多态性)
    def func(obj): # obj这个参数没有类型限制,可以传入不同类型的值 ;参数obj就是多态性的体现
    obj.run() # 调用的逻辑都一样,执行的结果却不一样

    func(peo1)
    func(pig1)
    func(d1)

    #区别:多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) 多态性:一种调用方式,不同的执行效果(多态性)
    #有关python中的


    #多态性的好处!!!!!
    """1)增加了程序的灵活性
      以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
    (2)增加了程序额可扩展性
      通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用"""
    lass Cat(Animal):  # 属于动物的另外一种形态:猫
        def talk(self):
            print('say miao')
    
    def func(animal):  # 对于使用者来说,自己的代码根本无需改动
        animal.talk()
    
    
    
    cat1 = Cat()  # 实例出一只猫
    func(cat1)  # 甚至连调用方式也无需改变,就能调用猫的talk功能

    '''
    这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。
    使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1)
    '''
     
  • 相关阅读:
    我的知识库(4) java获取页面编码(Z)
    知识库(3)JAVA 正则表达式 (超详细)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts
    某人总结的《英语听力的技巧 》,挺搞的
    我的知识库(5)java单例模式详解
    构建可扩展程序
    SerialPort (RS232 Serial COM Port) in C# .NET
    Python学习笔记——String、Sequences
    UI题目我的答案
    jQuery学习系列学会操纵Form表单元素(1)
  • 原文地址:https://www.cnblogs.com/yescarf/p/12907080.html
Copyright © 2011-2022 走看看