10.2、python类的继承

3、继承:

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

3.1、子类的方法__init__()

创建子类实例时,Python首先需要完成的任务是给父类的所有属性赋值;所以,子类的方法__init__()

from car import Car 

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

  • 创建子类时,必须在括号内指定父类的名称。class EletricCar(Car)
  • 方法__init__()接受创建Car实例所需的信息。
  • super()是一个特殊的函数,帮助Python将父类和子类联系起来。
    • 这行代码让Python调用ElectricCar的父类方法__init__()让ElectricCar实例包含父类的所有属性。
    • 父类也称为超类(superclass),名称super因此得名。

3.2、给子类定义属性和方法:

class Car():
    --snip-- 
    
    class ElectricCar( Car): 
        """ Represent aspects of a car, specific to electric vehicles.""" 
        def __init__( self, make, model, year):
            """ 
            电 动 汽 车 的 独 特 之 处 初 始 化 父 类 的 属 性,
            再 初 始 化 电 动 汽 车 特 有 的 属 性 
            """ 
            super().__init__( make, model, year)
			 ❶ self.battery_size = 70def describe_battery( self):
            """ 打 印 一 条 描 述 电 瓶 容 量 的 消 息""" 
            print(" This car has a " + str( self.battery_size) + "-kWh battery.") 
            
my_tesla = ElectricCar(' tesla', 'model s', 2016) 
print( my_tesla.get_descriptive_name())
my_tesla.describe_battery()
  • 在①处我们添加了新属性self.battery_size,并设置其初始值(如70)
    • 根据ElectricCar类创建的所有实例都包含这个属性
    • 但所有Car实例都不包含这一属性。
  • 在②处,我们还添加了一个名字为describe_battery()的方法,它打印有关电瓶的信息。

3.3、重写父类的方法:

假设Car类有一个名为fill_gas_tank()的方法,但它对全电动车来说毫无意义,因此你可以重写它:

class ElectricCar( Car):
    --snip-- 
    
    def fill_gas_tank(): 
        """ 电 动 汽 车 没 有 油 箱"""
        print(" This car doesn't need a gas tank!")
#对电动车调用方法fill_gas_tank(),Python将忽略Car类中的方法fill_gas_tank(),转而运行上诉代码。

使用继承时,可让子类保留从弗雷哪里继承而来的精华,并剔除不需要的糟粕。

3.4、将实例用作属性

class Car(): 
    --snip--class Battery():
        """ 一 次 模 拟 电 动 汽 车 电 瓶 的 简 单 尝 试"""def __init__( self, battery_size = 70):
            """ 初 始 化 电 瓶 的 属 性"""
            self.battery_size = battery_size 
            
        ❸ def describe_battery( self): 
            """ 打 印 一 条 描 述 电 瓶 容 量 的 消 息""" 
            print(" This car has a " + str( self.battery_size) + "-kWh battery.")

            
class ElectricCar( Car): 
    """ 电 动 汽 车 的 独 特 之 处"""
    def __init__( self, make, model, year):
        """ 
        初 始 化 父 类 的 属 性, 
        再 初 始 化 电 动 汽 车 特 有 的 属 性 
        """
        super(ElectricCar, self).__init__(make,model,year)
        ❹ self.battery = Battery() 
        
        
my_tesla = ElectricCar(' tesla', 'model s', 2016)

print( my_tesla.get_descriptive_name()) my_tesla.battery.describe_battery()

在上例ElectricCar类中,我们添加了一个名为**self.battery的属性**(上例④)

  • 这行代码让Python创建一个新的Battery实例,并将该实例存储在属性self.battery中。
  • 每当方法__init__()被调用时,都将执行该操作;现在每个ElectricCar实例都包含一个自动创建的Battery实例。

3.5、模拟实物

现实世界的建模方法没有对错之分,但要找到效率最高的表示方法。

本章代码示例来自:[美] Eric Matthes. Python编程:从入门到实践

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值