1.4 OOP 通过多个类展示python的封装,继承,多态,组合

一:代码文件结构
 


二:各个文件的具体代码

car.py代码如下:

class Car:

    #prperties,read odometer,update odomeger,increment odometer

    def __init__(self,brand,level,year):
        self.brand = brand
        self.level = level
        self.year = year
        self.odometer = 0

    def describe_information(self):
        print(f"this {self.level} car is made by {self.brand} in {self.year}" )    

    def read_odometer(self):
        print(f"this car has drived {self.odometer} kilometers!")   

    
    def update_odometer(self,odometer_new):
        if odometer_new >= self.odometer:
            self.odometer = odometer_new
        else:
            print("there is a logical bug!")   

    def increment_odometer(self,mile):   
        self.odometer += mile

electric.py代码如下:

from car import Car

#init_battery_size, describe battery, get range
class Battery:
    def __init__(self,battery_size = 50):
        self.dc_size = battery_size

    def describe_size(self):
        print(f"the size of battery is {self.dc_size}")    

    def get_range(self):
        if self.dc_size == 40:
            #赋值符号和等号不能搞混淆
            range = 150 
        elif self.dc_size == 50:
            range = 190
        print(f"this battery is able to provide ability about {range} KM")   

class Electric_car(Car):
    def __init__(self, brand, level, year):
        super().__init__(brand, level, year)

    #如果子类不覆盖超类的同名方法,那么实例化之后调用可以体现继承
    #如果子类覆盖超类的同名方法,那么体现不同子类在相同名称的超类函数的不同表现可以称为多态
    def describe_information(self):
        print(f"$$$$$here is an electric car,infomation:{self.brand},{self.level},{self.year}")   

        self.battery = Battery(50)                                 

my_cars.py代码如下:

from car import Car
from electric_car import Electric_car


my_car = Car('Audi','C',2023)
my_car.describe_information()


my_electric_car = Electric_car('TSLA','B','2025')
my_electric_car.describe_information()
my_electric_car.battery.describe_size()
my_electric_car.battery.get_range()

运行结果:


三:封装、继承、多态、组合如何体现
 

【封装】

将数据和行为封装在类中:

Battery 类封装了电池的容量(dc_size)和相关行为(describe_size、get_range)。
Electric_car 类封装了电动汽车的品牌(brand)、型号(level)、年份(year)以及与电池相关的行为。
通过方法控制对数据的访问:

Battery 类的 describe_size 和 get_range 方法提供了访问和操作电池容量的方式,而不是直接暴露 dc_size 属性。
Electric_car 类的 describe_information 方法提供了访问电动汽车信息的方式。
隐藏内部实现细节:

Battery 类的 get_range 方法根据 dc_size 计算续航里程,但具体的计算逻辑被封装在方法内部,外部无法直接访问。
Electric_car 类通过 self.battery = Battery(50) 创建并管理电池对象,但具体的创建和初始化过程被封装在 __init__ 方法中。
提高代码的可维护性和复用性:

封装使得每个类都具有清晰的职责,修改一个类的内部实现不会影响其他类。
Battery 类可以被其他需要电池功能的类复用。

继承、多态、组合在class Electric_car(Car)的代码中均可体

 class Electric_car(Car)中,直接实例化Battery类以构成完整的Electric_car类,体现了组合


四:注意事项

1)尤其注意缩进格式,也就是会影响代码的作用域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值