练习3:面向对象

T3h4t5-Blog90 / 2024-01-17 / 原文

#请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息。

设定

1) 出租车类:

属性包括:车型,车牌,所属出租公司;方法包括:启动,停止

2) 家用轿车类:

属性包括:车型,车牌,车主姓名;方法包括:启动,停止

要求

1) 分析出租车和家用轿车的公共成员,提取出父类—汽车类

2) 利用继承机制,实现出租车类和家用轿车类

3) 编写测试类,分别测试汽车类,出租车类和家用轿车类对象的相关方法

4) 定义名为car的包存放汽车类,出租车类,家用轿车类和测试类

abstractmethod是Python中的一个装饰器,用于表示一个方法是抽象方法。

抽象方法必须在子类中实现,否则子类也需要声明为抽象类。

使用abstractmethod可以提高代码的可读性和可维护性。

from abc import abstractmethod


class Car:
    def __init__(self, car_type, car_card):
        self.__car_type = car_type
        self.__car_card = car_card

    def set_car_type(self, car_type):
        self.__car_type = car_type

    def get_car_type(self):
        return self.__car_type

    def set_car_card(self, car_card):
        self.__car_card = car_card
    def get_car_card(self):
        return self.__car_card

    @abstractmethod
    def star(self):
        print('我是车,我启动')

    @abstractmethod
    def stop(self):
        print('我是车,我停止')


class Taxi(Car):
    def __init__(self, car_type, car_card, company):
        super().__init__(car_type, car_card)  #super 可以让子类去访问父类的类成员
        # self.__car_type = car_type
        # self.__car_card = car_card
        self.__company = company

    def set_company(self, company):
        self.__company = company

    def get_company(self):
        return self.__company

    def star(self):
        print('乘客您好')
        print(f'我是{self.__company}的,我的车牌是{self.get_car_card()},您要去哪里?')

    def stop(self):
        print('目的地已到,请您付费下车,欢迎下次再次乘坐')

    # def start(self):
    #     pass


class FamilyCar(Car):
    def __init__(self, car_type, car_card, user_name):
        super().__init__(car_type, car_card)
        # self.__car_type = car_type
        # self.__car_card = car_card
        self.__user_name = user_name

    def set_user_name(self, user_name):
        self.__user_name = user_name

    def get_user_name(self):
        return self.__user_name

    def star(self):
        print(f'我是{self.__user_name},我的汽车我做主')

    def stop(self):
        print('目的地到了,我们去玩吧')


if __name__ == '__main__':
    c1 = Car('车', '皖ABC')
    c1.star()
    c1.stop()
    print('=' * 30)
    c2 = FamilyCar('梅赛德斯奔驰迈巴赫S600', '皖A88888', '武大郎')
    c2.star()
    c2.stop()
    print('=' * 50)
    c3 = Taxi('出租车', '京B123', '景顺出租车公司')
    c3.star()
    c3.stop()