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不一样,他们是自动调用父类构造函数的。 '''