首页 > 编程语言 >Python 从入门到实战24(类的继承)

Python 从入门到实战24(类的继承)

时间:2024-09-21 10:22:14浏览次数:3  
标签:24 __ 入门 Python self color init Fruit print

        我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们讨论了类的定义、使用方法、@property的相关知识。今天我们将学习一下类的继承。

1、继承的基本语法

继承是面向对象编程最重要的特性之一,被继承的类称为父类或者基类。在它的基础上新建的类称为子类或者派生类。

继承的语法格式:

class  ClassName(baseclasslist):

         ‘’’类的帮助信息’’’

         statement      #类体

参数说明:ClassName -----指定类名

          statement -----类体,主要由类变量、方法和属性等定义语句组成

          baseclasslist----要继承的基类,可以有多个,类名之间由,分割

1)举例1:

#水果类为基类,然后创建其派生类的练习
class Fruit:   #定义水果类
    color = "green"  #定义类的属性
    def harvest(self,color):  #定义方法
        print("水果颜色是:"+color+"的!")
        print("水果收获了!")
        print("水果开始是:"+Fruit.color+"的!") #输出类的属性
class Banana(Fruit):  #定义派生类香蕉
    color = "yellow"
    def __init__(self):
        print("我是香蕉")
class Pear(Fruit):     #定义派生类梨
    color = "cyan"
    def __init__(self):
        print("我是梨")
banana = Banana()   #创建类的实例
banana.harvest(Banana.color)#调用基类的方法
pear = Pear()   #创建类的实例
pear.harvest(Pear.color)#调用基类的方法

输出结果参考:

2)举例2

#举例汽车类

class Vehicle:

    def __init__(self, make, model, year):

        self.make = make

        self.model = model

        self.year = year

    def start(self):

        print(f"{self.make} {self.model} started.")

    def stop(self):

        print(f"{self.make} {self.model} stopped.")

class Car(Vehicle):

    def start(self):

        print(f"{self.make} {self.model} revved the engine and started.")

car = Car()

car.start()

这样写执行会报错,car = Car()  因为car 继承Vehicle类,继承init方法

需要加上参数:car = Car("BYD","宋pro","2025")

改写后正常输出:

2、方法重写

基类的成员都会被派生类继承,当基类中的某个方法不完全适用派生类时,可以在派生类重写类的方法。还是上面的例子,我们重写harvest 方法

举例说明:

#水果类为基类,然后创建其派生类的练习
class Fruit:   #定义水果类
    color = "green"  #定义类的属性
    def harvest(self,color):  #定义方法
        print("水果颜色是:"+color+"的!")
        print("水果收获了!")
        print("水果开始是:"+Fruit.color+"的!") #输出类的属性
class Banana(Fruit):  #定义派生类香蕉
    color = "yellow"
    def __init__(self):
        print("我是香蕉")
class Pear(Fruit):     #定义派生类梨
    color = "cyan"
    def __init__(self):
        print("我是梨")
    def harvest(self,color):
        print("梨的颜色是:" + color + "的!")
        print("梨收获了!")
        print("梨开始是:" + Fruit.color + "的!")  # 输出类的属性
banana = Banana()   #创建类的实例
banana.harvest(Banana.color)#调用基类的方法
pear = Pear()   #创建类的实例
pear.harvest(Pear.color)#调用基类的方法

上面代码黄色阴影的部分是重写方法,输出结果参考:

3、派生类中调用基类的__init__()方法

在派生类中定义__init__()方法时,不会自动调用基类的__init__()。

如下面例子:

#水果类为基类,然后创建其派生类的练习
class Fruit:   #定义水果类
    def __init__(self,color="green"):
        Fruit.color = color
    def harvest(self):  #定义方法
        print("水果开始是:"+Fruit.color+"的!") #输出类的属性
class Banana(Fruit):  #定义派生类香蕉
    color = "yellow"
    def __init__(self):
        print("我是香蕉")
banana = Banana()
banana.harvest()

上面这么写会报错,不能直接调用基类的__init__()

若是想要在派生类中调用基类__init__()方法,需要在派生类中使用super()函数,下面添加黄色背景部分的代码,注意缩进,是在派生类的__init__()方法中调用基类的__init__()方法。

#水果类为基类,然后创建其派生类的练习
class Fruit:   #定义水果类
    def __init__(self,color="green"):
        Fruit.color = color
    def harvest(self):  #定义方法
        print("水果开始是:"+Fruit.color+"的!") #输出类的属性
class Banana(Fruit):  #定义派生类香蕉
    def __init__(self):
        print("我是香蕉")
        super().__init__()
banana = Banana()
banana.harvest()

参考输出:

再举例说明具体的应用:

#水果类为基类,然后创建其派生类的练习
class Fruit:   #定义水果类
    def __init__(self,color="green"):
        Fruit.color = color
    def harvest(self,color):  #定义方法
        print("水果的颜色是:"+self.color+"的!") #输出类的属性
        print("水果开始收获了")
        print("水果开始的颜色是:" + Fruit.color + "的!")  # 输出类的属性
class Banana(Fruit):  #定义派生类香蕉
    color = "yellow"
    def __init__(self):
        print("我是香蕉")
        super().__init__()#调用时并没有输出,只是传color,基类默认的
class Pear(Fruit):     #定义派生类梨
    #color = "cyan"
    def __init__(self,color):
        print("\n我是梨")
        super().__init__(color)  # 调用时并没有输出,只是传color,更改基类默认的
    def harvest(self,color):#重写方法
        print("梨的颜色是:" + color + "的!")
        print("梨收获了!")
        print("梨开始是:" + Fruit.color + "的!")  # 输出类的属性

banana = Banana()
banana.harvest(banana.color)
pear = Pear("cyan")   #创建类的实例
pear.harvest("yellow white")#调用基类的方法

输出结果参考:

今天先写学习到这里了,每天进步一点点。明天也要加油啊!

标签:24,__,入门,Python,self,color,init,Fruit,print
From: https://blog.csdn.net/weixin_45999406/article/details/142412322

相关文章

  • 网络安全(黑客技术)—2024自学手册
    前言什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。如何成为一名黑客很多朋友在学习安全方面都会半路转行,因为不知如何去学,在这里,我将这个整份......
  • 1024个线程居然不够用?RPC 线程池被打满!
    打开公司群,就看见群里有人讨论:线上环境出现大量RPC请求报错,异常原因:被线程池拒绝。虽然异常量很大,但是异常服务非核心服务,属于系统旁路,服务于数据核对任务,即使有大量异常,也没有实际的影响。原来有人在线上刷数据,产生了大量binlog,数据核对任务的请求量大幅上涨,导致线程池被打满。第......
  • Python 中的 strip() 和 split() 方法详解
    目录一、strip()方法1.什么是strip()?2.基本语法3.基本用法示例1)去除空白字符2)移除指定字符4.lstrip()和rstrip()5.注意事项二、split()方法1.什么是split()?2.基本语法3.基本用法示例1)按空格分割字符串2)指定分隔符3)限制分割次数4.rsplit()方法......
  • 【D3.js in Action 3 精译_024】3.4 让 D3 数据适应屏幕(上)
    当前内容所在位置(可进入专栏查看其他译好的章节内容)第一部分D3.js基础知识第一章D3.js简介(已完结)1.1何为D3.js?1.2D3生态系统——入门须知1.3数据可视化最佳实践(上)1.3数据可视化最佳实践(下)1.4本章小结第二章DOM的操作方法(已完结)2.1第一......
  • Python安装
    目录对于Linux和BSD用户对于Windows用户Python安装-CSDN博客Python操作符-CSDN博客Python基础学习-CSDN博客对于Linux和BSD用户如果你正在使用一个Linux的发行版比如Fedora或者Mandrake或者其他(你的选择),或者一个BSD系统比如FreeBSD,那么你可能已经在你的......
  • Python 基础学习
    目录字面意义上的常量数字符串单引号双引号三引号转义序列自然字符串字符串是不可变的字符串按字面意义连接变量标识符的命名数据类型对象Python安装-CSDN博客字面意义上的常量一个字面意义上的常量的例子是如同5、1.23、9.25e-3这样的数,或者如同’Thi......
  • Python 操作符
    你写的许多语句(逻辑行)会包含表达式。表达式的最简单的例子是2+3。表达式可以被分解成操作符和操作数。运算符的功能是完成某件事,它们由如+这样的符号或者其他特定的关键字表示。运算符需要数据来进行运算,这样的数据被称为操作数。在这个例子中,2和3是操作数。目录......
  • Python命令
    #在Python中,您可以使用pip命令行工具来查看已安装的库#piplist#清理缓存#pipcachepurge#查看pippython版本#pip--version#卸载#pipuninstallpackage_name#pip更国内源***********************************************************************************......
  • Python函数基础
    1-函数的概念总结:函数是组织好的、可重复使用的、用来实现特定功能的代码段使用函数的好处:将功能封装在函数内,可供随时随地重复使用提高代码的复用性,减少重复代码,提高开发效率2-函数的定义总结:函数的定义语法def函数名(传入参数):函数体return返......
  • Python基础语法
    1-字面量示例:print(10)print(3.1415926)print(True)print("True")print("3.14.!#$!@#$!@#%#2515926")总结:字面量的含义:代码中,被写在代码中的固定的值常见的字面量类型有:整数、浮点数、字符串、布尔类型2-注释示例:"""单行注释:#多行注释:一对三引号ctrl+a......