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不一樣,他們是自動調用父類構造函數的。
'''

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM