zoukankan      html  css  js  c++  java
  • 面向对象三大特性-多态

    多态:

    python 生来支持多态
    白话:一种事物的多种形态 (动物可以继承给狗,也可以继承给猫)

    class Animal:
      pass
    class Dog(Animal):
      def attack(self):
        pass
     
     
    比如,其它语言:
    class Animal:
      pass
    class Dog(object Animal): 需要指定数据类型
      def attack(self):
        pass

    --------------------

    def func(int a): 指定数据类型 是int, 要是传str, 会报错
      pass
    def func(a): #python 不需要指定
      pass

    鸭子类型:

    Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’

    #二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
    class TxtFile:
      def read(self):
        pass
    
      def write(self):  
        pass
    
    class DiskFile:
      def read(self):
        pass
      def write(self):
        pass
    还有: 
    people.attack()
    dog.attack()
    
    接收的消息一样attack(), 但是,执行的人不一样, 执行的函数内容不一样

    总结:
    对于某些方法来说,可以无差别的对待的几个类型,就是鸭子类型
    python 不崇尚相似数据类型之间的继承关系
    #目的是为了减少依赖关系,解耦


    写功能性的程序:以功能为导向
    写框架类的,或者模块类的: 使用继承的同时还要考虑解耦

  • 相关阅读:
    洛谷 P4861 按钮
    《情人》
    bzoj1019: [SHOI2008]汉诺塔(dp)
    hdu5698瞬间移动(组合数,逆元)
    poj Code(组合数)
    组合数 牛顿二项式定理 杨辉三角
    8.22 NOIP 模拟题
    codevs2495 水叮当的舞步(IDA*)
    codevs 2541 幂运算(迭代加深搜索)
    较复杂搜索,剪枝
  • 原文地址:https://www.cnblogs.com/jin-yuana/p/10025140.html
Copyright © 2011-2022 走看看