python继承与多态!(代码片段)

author author     2022-12-05     556

关键词:

继承

继承让我们更加容易实现类的扩展。子类是父类的拓展。

class ParentClass1: #定义父类1
    pass
class ParentClass2: #定义父类2
    pass
class SubClass1(ParentClass1):
    # 单继承,基类是ParentClass1,派生类是SubClass
    pass
class SubClass2(ParentClass1,ParentClass2):
    # python支持多继承,用逗号分隔开多个继承的类
    pass

继承的规则

  1. 子类继承父类的成员变量和成员方法
  2. 子类不继承父类的构造方法,能够继承父类的析构方法
  3. 子类不能删除父类的成员,但可以重定义父类成员
  4. 子类可以增加自己的成员
class Person():

    def __init__(self, name, age, sex):
        self.name = "jasn"
        self.age = 18
        self.sex = sex

    def talk(self):
        print("i want to speak something to yo!!")


class Chinese(Person):
    def __init__(self, name, age, sex, language):
        Person.__init__(self, name, age, sex)  # 用父类的name,age,sex 覆盖掉子类的属性
        self.age = age  # 覆盖掉了父类的age,取值为子类实例中传入age参数
        self.language = "chinese"

    def talk(self):
        print("我说的是普通话!!")
        Person.talk(self)


obj = Chinese("nancy",18,male,"普通话")

print(obj.name)  # 对应场景A
print(obj.age)  # 对应场景B
print(obj.language)  # 对应场景C
obj.talk()  # 对应场景D

注意:

  1. 若父类中初始化了成员变量,子类调用父类构造方法未覆盖属性(self.name),则调用子类属性时取值为父类中初始化的成员变量
  2. 若父类中初始化了成员变量,若子类调用父类构造方法覆盖属性(self.age)则取值为子类实例中传入参数
  3. 若父类未初始化该成员变量,则无论子类中有无进行对父类构造方法进行属性的覆盖,均取子类实例中传入的参数
  4. 对于方法,如果子类有这个方法则直接调用,如果子类没有则去父类查找。父类没有则报错

多态

让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。

示例

1、使用python,选择小汽车和客车为对象,使用类实现它们的属性和方 法(汽车的重量属性,驾驶的方法),并打印属性 2、对第一个问题改写:继承客车的属性和方法,改造为公交车,输入的 名字为:“东风路28路公交车”,并打印(也包括属性和驾驶的方法) 3、使用多态实现28路、906路、B32路公交车的驾驶方法并打印

示例代码:

class Car(object):#定义汽车类
    def __init__(self,name,weight):#定义汽车对象的属性
        self.name = name#定义名称属性
        self.weight = weight#定义重量属性

    def drive(self):#定义汽车对象的方法
        print(self.name+"正常驾驶")#输出驾驶方法
class Passenger(object):#定义客车类
    def __init__(self,name,weight):#定义客车对象的属性
        self.name = name#定义名称属性
        self.weight = weight#定义重量属性

    def drive(self):#定义客车对象的方法
        print(self.name + "正常驾驶")#输出驾驶方法

car1 = Car("汽车1号","10kg")#初始化一个汽车对象并传入参数
car1.drive()#调用汽车的驾驶方法
passenger1 = Passenger("客车1号","100kg")#初始化一个客车对象并传入参数
passenger1.drive()#调用客车的驾驶方法

class Bus(Passenger):#定义公交车类继承于客车
    def __init__(self,name,weight):#定义公交车对象的属性
        Passenger.__init__(self,name,weight)#调用父类对象构造函数覆盖子类的对象属性

bus1 = Bus("东风路28路公交车","150kg")#初始化一个公交车对象并传入参数
bus2 = Bus("东风路906路公交车","150kg")#初始化一个公交车对象并传入参数
bus3 = Bus("东风路B32路公交车","150kg")#初始化一个公交车对象并传入参数
bus1.drive()#调用公交车继承于客车的驾驶方法
bus2.drive()#调用公交车继承于客车的驾驶方法
bus3.drive()#调用公交车继承于客车的驾驶方法

继承与多态(代码片段)

第三章:继承与多态知识梳理面向对象具有三大特性:封装、继承、多态本章的内容:学习Java中包的概念以及另外两大特征:继承和多态。1.包的定义与使用(1)Java中通过包来完成对类的管理,每个... 查看详情

第四节——继承与多态(代码片段)

继承的学习一、继承的特性子类拥有父类非private的属性(成员变量,类似但不全是)、方法。子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。多态的学习一、多态的概念多态:同一个对象,在不同时... 查看详情

03继承与多态动手动脑(代码片段)

动手实验:继承条件下的构造方法调用运行TestInherits.java示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第一句,影响重... 查看详情

java继承与多态(代码片段)

目录一、继承1.1Java继承一父对多子,一子对一父,且纵深到顶1.2重写(overwrite)与重构(over) 1.3构造函数的继承1.4thisandsuper1.4.1this的意义1.4.2 this的特殊用法——this与构造函数1.4.3super的意义1.4.4super的特... 查看详情

java继承与多态(代码片段)

目录一、继承1.1Java继承一父对多子,一子对一父,且纵深到顶1.2重写(overwrite)与重构(over) 1.3构造函数的继承1.4thisandsuper1.4.1this的意义1.4.2 this的特殊用法——this与构造函数1.4.3super的意义1.4.4super的特... 查看详情

继承继承多态(代码片段)

python中支持单继承和多继承。在python3中,所有的类都默认继承Object类。创建一个Hero类classHero:#创建一个英雄类def__init__(self,name,level,category):#属性:名字、等级、系别self.name=nameself.level=levelself.category=categorydefrun(self):print("一个英... 查看详情

继承多态及方法重写重载(代码片段)

...多态与属性无关);(2)多态的存在要有3个必要条件:继承、方法重写、父类引用指向子类对象;(3)父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。/***---(1)多态是方法的多态,不死属... 查看详情

python--继承和多态(代码片段)

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Baseclass、Superclass)。 当子类和父类都存在相同的run()方法时,我们说,子类... 查看详情

面向对象进阶1(代码片段)

...父母的基因,遗产,所以子女会拥有父母的部分特征而在python中,子类继承父类就是子类完全拥有父类所具备的属性及技能为什 查看详情

第二十六天组合封装多态(代码片段)

...之间的代码冗余问题  2.如何继承:先抽象再继承  3.Python中继承的特点:    1.      单继承      多继承    2.      新式类      经典类今日内容:  1.组合  2.封装  3.多态一.组合... 查看详情

[实验6]类的继承与多态(代码片段)

一、实验目的1.理解类的继承和派生机制2.掌握派生类的定义和使用3.掌握派生类成员的标识与访问中同名覆盖原则、二元作用域分辨符和虚基类的用法4.掌握派生类构造函数和析构函数的定义及调用次序5.理解运算符重载的目的... 查看详情

c++多态(代码片段)

...al重载、覆盖(重写)、隐藏(重定义)的对比三、抽象类接口继承和实现继承四、多态的原理虚函数表多态的原理动态绑定与静态绑定五、单继承和多继承关系的虚函数表单继承中的虚函数表多继承中的虚函数表菱形继承、菱形虚拟... 查看详情

python面向对象—继承多态(代码片段)

继承语法1.代码:class子类(父类): def__init__(self,参数列表):super().__init__(参数列表)self.自身实例变量=参数设计角度:先有子类,再有父类.抽象化的过程:子(具体,小概念)->父(抽象,大概念)编码角度:先写父类,再写子类.2.说明:--子... 查看详情

继承与多态——动手又动脑(代码片段)

...,它会依次调用父类的构造函数。以下是原因:当一个类继承了其它类时,在它的构造函数(constructor)中super()必须被首先调用,如果super()没有被调用,则编译器将在构造函数(constructor)的第一行插入对super()的调用。这就是为什么... 查看详情

c++多态详解(代码片段)

...隐藏)、重写(覆盖)的对比抽象类概念接口继承与实现继承原理虚函数表底层原理静态绑定和动态绑定小结单继承和多继承关系中的虚函数表单继承中的虚函数表多继承中的虚函数表概念多态,即多种形态&# 查看详情

python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承(代码片段)

一:面向对象三大特征介绍  Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。  封装(隐藏)    隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装... 查看详情

java面对对象三大特征之继承多态(代码片段)

面对对象三大特征继承、多态继承1.继承的概念:2.继承的实现:3.继承的好处与弊端:4.super5.继承中的成员访问特点以及访问修饰符:JAVA中的访问修饰符6.方法重写以及继承的注意事项:多态1.多态的概念2.多态中成员访问特点3.多态的... 查看详情

面向对象--继承和多态(代码片段)

一、继承继承的类称为子类,被继承的类称为基类,父类,或超类。继承的优点:简化了代码提高了代码的健壮性提高了代码的安全性多态的前提缺点:耦合与内聚。耦合性越低,内聚性越高,代码越好。比如,有一个Animal类,... 查看详情