zoukankan      html  css  js  c++  java
  • Python面向对象(四)—继承、多态

    继承

    语法

    1.代码:

    class 子类(父类):

      def __init__(self,参数列表):

    super().__init__(参数列表)

    self.自身实例变量 = 参数

    设计角度: 先有子类,再有父类. 抽象化的过程:子(具体,小概念) -> 父(抽象,大概念)

    编码角度: 先写父类,再写子类.

    2.说明:

    -- 子类拥有父类的所有成员。

    -- 子类如果没有构造函数,将自动执行父类的,但如果有构造函数将覆盖父类的。此时必须通过super()函数调用父类的构造函数,以确保父类属性被正常创建。

    class Person:
      def __init__(self, name):
        self.name = name
      def say(self):
        print("会说话")
    
    class Student(Person):
      # 如果子类具有构造函数,则没有父类的构造函数.
      def __init__(self, name, score):
        self.score = score
        # 通过super()函数调用父类方法
        super().__init__(name)
      def study(self):
        print("会学习")
    
    class Teacher(Person):
      def __index__(self,name):
        super().__init__(name)
      def teach(self):
        print("会讲课")
    
    
    s01 = Student("无忌", 100)
    print(s01.name)
    print(s01.score)
    s01.say()
    s01.study()
    # 子类对象,直接使用父类方法.(继承语法的体现)
    
    p01 = Person("无忌")
    print(p01.name)
    # 如果子类没有构造函数,则使用父类的.
    p01.say()
    # 父类对象,只能使用自身方法,不能使用子类方法.

    多继承

    一个子类继承两个或两个以上的基类,父类中的属性和方法同时被子类继承下来。

    同名方法的解析顺序(MROMethod Resolution Order:

    类自身 --> 父类继承列表(由左至右)--> 再上层父类

          A

          /

         /   

        B     C

            /

           /

           D

    定义

    1.重用现有类的功能与概念,并在此基础上进行扩展。

    2.说明:

    -- 子类直接具有父类的成员(共性),还可以扩展新功能。

    -- 事物具有一定的层次、渊源,继承可以统一概念。

    例如:公司组织架构

           老板

    行政中心         营销中心           技术中心

    人力资源  行政部   销售部  策划部   研发部  产品部

    优点

    1.一种代码复用的方式。

    2.以层次化的方式管理类

    缺点:耦合度高

    作用:隔离客户端代码与功能的实现方式。(抽象(代表)变化点,隔离用与做.)

    适用性:多个类在概念上是一致的,且需要进行统一的处理。

    相关概念

    父类(基类、超类)、子类(派生类)。

    父类相对于子类更抽象,范围更宽泛;子类相对于父类更具体,范围更狭小。

    单继承:父类只有一个(例如 JavaC#)。

    多继承:父类有多个(例如C++Python)。

    Object类:任何类都直接或间接继承自 object 类。

    内置函数

    isinstance(obj, class_or_tuple)

    返回这个对象obj 是否是某个类的对象,或者某些类中的一个类的对象。

    # 判断对象是否属于一个类型
    print(isinstance(s01, Person))  # true
    print(isinstance(s01, Teacher))  # false
    print(isinstance(s01, (Person, Teacher)))  # true
    print(isinstance(s01, Student))  # true
    
    # 判断一个类型是否属于另一个类型
    print(issubclass(Teacher, Person))  # true
    print(issubclass(Teacher, Student))  # false
    print(issubclass(Person, Student))  # false
    print(issubclass(Person, Person))  # true
    # 如果判断父子
    print(issubclass(Teacher, Person) and Teacher != Person)  # true
    print(issubclass(Teacher, Teacher) and Teacher != Teacher)  # false

    多态

    定义:

    父类的同一种动作或者行为,在不同的子类上有不同的实现(调用父类,执行子类.)

    作用:

    1.继承相关概念的共性进行抽象,多态在共性的基础上,体现类型的个性化(一个行为有不同的实现)。

    2.增强程序扩展性,体现开闭原则。

    重写:

    子类实现了父类中相同的方法(方法名、参数),在调用该方法时,实际调用的是子类的方法。(变化点重写。)

  • 相关阅读:
    dotnet run urls=http://*:8080
    内敛声明变量
    C#反射赋值(更新时用)
    mysql---auto_increment=10啥意思呢?
    vscode--代码折叠与展开
    联想启天M410台式机的清除BIOS密码
    AntD是什么?
    react-router-dom 中文文档
    Recoil是什么?
    sql server查看建表的创建代码?
  • 原文地址:https://www.cnblogs.com/maplethefox/p/10887853.html
Copyright © 2011-2022 走看看