iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python进阶语法之类的继承
  • 170
分享到

Python进阶语法之类的继承

2024-04-02 19:04:59 170人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、子类的方法__init__( )创建一个Car类创建子类ElelctricCar二、给子类定义属性和方法三、重写父类的方法总结 在编写类时,我们并非每次都需要从空白开始。 如

在编写类时,我们并非每次都需要从空白开始。

如果我们要编写的类是我们曾经编写过的类(现成的)的特殊版本,可使用继承。

一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类称为父类,而新类称为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。

一、子类的方法__init__( )

在既有类的基础上编写新类时,通常要调用父类的方法__init__( )。这将初始化在父类__init__( )方法中定义的所有属性,从而让子类包含这些属性。

例如,下面来模拟电动汽车。电动汽车是一种特殊的汽车,因此可在前面创建的Car类的基础上创建新类ElelctricCar。这样就只需为电动汽车特有的属性和行为编写代码。

创建一个Car类


class Car:
    """一次模拟汽车的简单尝试"""
    def __init__(self, make, model, year):
        """初始化汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0
    def get_descriptive_name(self):
        """返回整洁的描述性信息"""
        long_name = f'{self.year}{self.make}{self.model}'
        return long_name.title()
    def read_odometer(self):
        """打印一条指出汽车里程的消息"""
        print(f"This car has {self.odometer_reading} miles on it")
    def update_odometer(self, mileage):
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print('你怎么能调表呢?!!?!')
    def increment_odoment(self,miles):
        """将里程表读数增加到指定数量"""
        self.odometer_reading+=miles

创建子类ElelctricCar

下面我们来创建ElelctricCar类的一个简单版本,它具备Car类的所有功能:


class Car
    pass
class ElectricCar(Car):
    """电动汽车的独特之处"""
    def __init__(self,make,model,year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
my_tesla=ElectricCar(' tesla', ' models', 2021)
print(my_tesla.get_descriptive_name())

首先是Car类的代码。创建子类时,父类必须包含在当前文件中,且位于子类的前面。定义子类ElectricCar。定义子类时,必须在圆括号内指定父类的名称。方法__init__( )接受创建Car实例所有需要的信息。

super()是一个特殊函数,让你能够调用父类的方法。这行代码能让Pyhton调用Car类的方法__init__( ),让ElectricCar实例包含这个方法中定义的所有属性。父类也称为超类(superclass),名称super由此而来。

二、给子类定义属性和方法

让一个类继承另一个类后,就可以添加区分子类和父类所需的新属性和新方法了。

下面来添加一个电动汽车特有的属性(电瓶),以及一个描述该属性的方法。我们将存储电瓶容量,并编写一个打印电瓶描述的方法:


class Car:
    pass
    def __init__(self,make,model,year):
        """初始化父类的属性。
           再初始化电动汽车特有的属性"""
      super().__init__(make, model, year)
        self.battery_size = 75
    def descibe_battery(self):
        """打印一条描述电瓶容量的消息"""
        print(f"这个车有{self.battery_size}千瓦时的电池")
my_tesla=ElectricCar(' tesla', ' models', 2021)
print(my_tesla.get_descriptive_name())
my_tesla.descibe_battery()

在这里给Car类添加的子类ElectricCar类中,又定义了一个battery_size属性,,并且添加了一个describer_battery( )方法 ,打印有关电瓶的信息。调用这个方法时,将会看到一特有的描述:

2021 Tesla Models
这个车有75千瓦时的电池

三、重写父类的方法

对于父类的方法,我们有可能发现父类的方法不符合子类模拟的实物的行为,这时我们便可以改写它。为此,我们可以在子类中定义一个与要重写的父类方法同名的方法。这样python将不会考虑这个父类的方法。

比如:


class ElectricCar(Car):
    pass
    def fill_gas_tank(self):
        """电动汽车没有油箱"""
        print("这个车没有油箱!")

将此定义在子类也写一遍之后,即可覆盖父类中的方法。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: Python进阶语法之类的继承

本文链接: https://www.lsjlt.com/news/159886.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作