zoukankan      html  css  js  c++  java
  • 面向对象进阶(1)

    类的继承

    什么是类的继承

    类的继承是一种新建类的方式,分为父类和子类,子类可以拿到父类的特征和方法

    class Foo:
        def __init__(self,first_name,money):
            self.first_name = first_name
            self.money = money
        def dahulu(self):
            print('呼噜噜')
            
    class FooSon(Foo):
        pass
    
    son1 = FooSon('毛',10)
    print(son1.money)
    
    10
    

    即使子类中没有此特征,只要是父类中有,子类一样可以拿到使用

    为什么要使用继承

    可以减少重复,对于使用同一套特征和方法的对象不用重复定义

    继承后的查找顺序:先自己,再类,再父类,再父类,父类找完之后再父类的父类

    类的派生

    类的派生意思是在添加新的属性的同时还继承父类的所有东西

    super()的使用:

    如果子类没有自己的__init__方法,则无需使用super()

    如果子类有自己的__init__方法,则需要使用super()来声明继承哪一个父类的__init__

    class Foo:
        def __init__(self,first_name,money):
            self.first_name = first_name
            self.money = money
        def dahulu(self):
            print('呼噜噜')
            
    class FooSon(Foo):
        def __init__(self,age,first_name,money):
            super().__init__(first_name,money)
            self.age = age
    son1 = FooSon(18,'毛',10)
    print(son1.money)
    
    10
    

    菱形继承

    菱形继承就是一个子类继承了多个父类,这些父类中有多个又继承于同一个父类

    新式类:继承了object的类就是新式类,python3中所有类都是新式类

    经典类:没有继承object的类就是经典类,只有python2中有经典类

    菱形继承时新式类和经典类搜索顺序不同

    经典类:深度优先

    意思就是会沿着先后顺序沿着父类顺藤摸瓜一直找到最初的父类,如果找不到就再进行下一个藤的顺藤摸瓜

    新式类:广度优先

    意思就是开始也是在沿着先后顺序沿着父类顺藤摸瓜,但在摸到最初一层的父类时先不会去寻找,而是换一个藤继续,最后再找最初的父类

    多态与多态性

    多态:多种状态,只要大家能继承同一种东西A,这些东西就都是A的多态

    例如:液态水冰水蒸气都是水的多态

    import abc和@abc.abstractmethod

    abc是一个模块,@abc.abstractmethod是这个模块的一个方法,它的作用是:

    在定义类A中加在类的某个方法的上方时会做一个限定:只要同样具有这个方法的类就是A的一种形态,才能使用A中的特征和方法,相当于是一个在使用类前的验证身份环节

    鸭子类型

    长得像鸭子,叫声也像鸭子,那就是鸭子

  • 相关阅读:
    面向对象的程序设计-2-创建对象
    面向对象的程序设计-1-理解对象
    react组件的生命周期
    react-router 组件式配置与对象式配置小区别
    mobx @computed的解读
    十分钟介绍mobx与react
    less学习
    git-简单流程(学习笔记)
    几种视频编码器的编译及使用方法
    一位程序员工作10年总结的13个忠告
  • 原文地址:https://www.cnblogs.com/acate/p/11051714.html
Copyright © 2011-2022 走看看