• Python父类和子类关系/继承


    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    @File:继承_子类和父类的关系.py    
    @E-mail:364942727@qq.com
    @Time:2020/4/4 12:39 上午 
    @Author:Nobita   
    @Version:1.0   
    @Desciption:父类和子类关系/继承
    """
    
    
    class Car():
        def __init__(self, make, model, year):
            self.make = make
            self.model = model
            self.year = year
            self.meter = 0
    
        def get_car_description(self):
            long_name = str(self.make) + ' ' + self.model + ' ' + self.year
            return long_name
    
        def read_meter(self):  # 读取公里数的方法
            print('This car have ' + str(self.meter) + ' mi')
    
        def update_meter(self, mileage):  # 定义了一个修改公里数的方法,以后要修改公里数的时候,就不需要通过实例化去修改属性的值了
            self.meter = mileage
    
        def increment_meter(self, miles):  # 新增加的公里数,做加法运算
            self.meter += miles
    
    
    my_car = Car('china', 'audi', '2010')
    
    print(my_car.model)
    print(my_car.get_car_description().title())  # title方法语法 -> str.title() //返回"标题化"的字符串,就是说所有单词都是以大写开始。
    my_car.read_meter()
    my_car.meter = 50  # 通过实例化对属性的值做改变
    my_car.read_meter()
    my_car.update_meter(100)  # 通过之前定义的方法修改属性的值
    my_car.read_meter()
    my_car.increment_meter(200)
    my_car.read_meter()
    
    
    class Battery():
        def __init__(self, battery_size=70):
            self.battery_size = battery_size
    
        def describe_battery(self):
            print('这个车有' + str(self.battery_size) + '的电容量')
    
        def get_range(self):
            if self.battery_size == 70:
                car_range = 240
            elif self.battery_size <= 100 and self.battery_size >= 75:
                car_range = 270
            msg = '这个车能跑{}公里'.format(car_range)
            return msg
    
    
    class ElectricCar(Car):  # 创造ElectricCar(电动汽车)类
        def __init__(self, make, model, year):
            super().__init__(make, model, year)
            self.battery = Battery()
    
        def describe_battery(self):
            print('电动汽车特有的属性是{}'.format(self.battery.battery_size))
    
        def read_meter(self):
            # 父类当中的一个方法,对子类没有帮助;在子类当中,定义一个父类当中同名字的方法名,那么就会忽略父类的方法,取其精华。(重写父类的方法)
            print('这个方法是重写父类的方法,会忽略父类当中的read_meter()方法')
    
    
    my_ele_car = ElectricCar('usa', 'baoma', '2020')
    
    print(my_ele_car.get_car_description().title())
    my_ele_car.read_meter()
    my_ele_car.describe_battery()
    my_ele_car.battery.describe_battery()
    print(my_ele_car.battery.battery_size)
    print(my_ele_car.battery.get_range())
    my_ele_car.battery.battery_size = 80  # 通过实例化对属性的值做改变
    print(my_ele_car.battery.get_range())
    
    '''
    super()是一个特殊的函数,它让父类和子类可以关联起来。
    这段代码让python调用ElectricCar的父类方法__init__(),让ElectricCar实例包含父类的所有属性。
    Python中类的初始化方法是__init__(),因此父类、子类的初始化方法都是这个,
    如果子类不实现__init__()这个函数,初始化时调用父类的初始化函数,
    如果子类实现了这个函数,则要在这个函数里显式调用一下父类的__init__(),
    这跟C++,jAVA不一样,他们是自动调用父类构造函数的。
    '''
  • 相关阅读:
    Record of coding:Codeforces 1093E
    【刷题记录】网络流24题等
    【模板归纳】网络流及费用流
    【刷题记录】BZOJ2154 crash的数字表格 莫比乌斯反演
    【刷题记录】SDOI2017数字表格
    算法总结 给定范围内最大公约数为某一定值的数对个数的算法
    刷题记录【BZOJ2440 完全平方数】数论、组合数学、莫比乌斯函数
    刷题记录 【HAOI2007】理想的正方形 二维st表
    刷题记录【ZJOJ2005午餐】,贪心+DP或者
    刷题记录【ZJOI2007棋盘制作】二维DP,悬线法。。。
  • 原文地址:https://www.cnblogs.com/chenshengkai/p/12630147.html
Copyright © 2020-2023  润新知