#-*- coding: utf-8 -*-
print ("=============類的三要素:類名、屬性、方法==============")
#類是對象的載體,我們可以把一類對象的公共特徵抽象出來,創建通用的類
#創建類
class Cat():
"""模擬篇"""
def __init__(self,name):
"""初始化屬性"""
self.name = name
def jump(self):
"""模擬貓的跳躍"""
print(self.name+" is jumping")
#用類創建實例
my_cat = Cat("Loser")
your_cat = Cat("Lucky")
#調用屬性
print(my_cat.name)
print(your_cat.name)
#調用方法
my_cat.jump()
your_cat.jump()
print("=============類的命名==============")
#類的命名要有實際意義 採用駝峯命名法,即組成的單詞首字母大寫
#類的屬性
#def __init__(self,要傳遞的參數) 初始化類的操作
#無論是初始化類還是定義方法的時候,都需要有self參數
class Car():
"""模擬汽車"""
def __init__(self,brand,model,year):
"""初始化汽車屬性""" #相當於類內部的變量
self.brand = brand
self.model = model
self.year = year
self.mileage = 0 #新車總里程初始化爲0
def get_main_infomation(self): #self不能省略
"""獲取汽車的主要信息"""
print("品牌:{} 型號:{} 出廠年份:{}".format(self.brand,self.model,self.year))
def get_mileage(self):
"""獲取總里程數"""
return "汽車行駛總里程:{}公里".format(self.mileage)
print("=============創建實例================")
#創建實例 將實例賦值給對象,實例化過程中,傳入相應的參數 v = 類名(必要的初始化參數)
my_new_car = Car("Audi","A6","2018")
#訪問屬性 類名.類屬性
print(my_new_car.brand)
print(my_new_car.model)
print(my_new_car.mileage)
#方法調用 實例名.方法名(必要的參數)
my_new_car = Car("Audi","A6","2018")
my_new_car.get_main_infomation()
s = my_new_car.get_mileage()
print (s)
#屬性修改
#直接修改 先訪問 後修改
my_new_car = Car("BYD","宋",2016)
my_new_car.mileage = 12000
print(my_new_car.mileage)
#通過方法修改屬性
class Car1():
"""模擬汽車"""
def __init__(self,brand,model,year,distance):
"""初始化汽車屬性""" #相當於類內部的變量
self.brand = brand
self.model = model
self.year = year
self.mileage = 0 #新車總里程初始化爲0
def get_main_infomation(self): #self不能省略
"""獲取汽車的主要信息"""
print("品牌:{} 型號:{} 出廠年份:{}".format(self.brand,self.model,self.year))
def get_mileage(self):
"""獲取總里程數"""
return "汽車行駛總里程:{}公里".format(self.mileage)
def set_mileage(self,distance):
"""設置總里程數"""
self.mileage = distance
print("===============類的繼承=================")
#所謂繼承,就是底層級的抽象繼承高層級的抽象的過程
#簡單的繼承
#父類
class Car():
"""模擬汽車"""
def __init__(self,brand,model,year):
"""初始化汽車屬性""" #相當於類內部的變量
self.brand = brand
self.model = model
self.year = year
self.mileage = 0 #新車總里程初始化爲0
def get_main_infomation(self): #self不能省略
"""獲取汽車的主要信息"""
print("品牌:{} 型號:{} 出廠年份:{}".format(self.brand,self.model,self.year))
def get_mileage(self):
"""獲取總里程數"""
return "汽車行駛總里程:{}公里".format(self.mileage)
#構造電動汽車子類 class 子類名(父類名):
class ElectricCar(Car):
"模擬電動汽車"
def __init__(self,brand,model,year):
"""初始化電動汽車屬性"""
super().__init__(brand,model,year) #聲明繼承父類的屬性,此時子類自動繼承父類方法
#使用子類
my_electric_car = ElectricCar("NextWeek","FF91",2046)
my_electric_car.get_main_infomation()
#給子類添加屬性和方法
class ElectricCar1(Car):
"""模擬電動汽車"""
#新傳入電池容量數據
def __init__(self,brand,model,year,bettery_size):
super().__init__(brand,model,year) #聲明繼承父類的屬性,此時子類自動繼承父類方法
self.bettery_size = bettery_size #電池容量
self.electric_quantity = bettery_size #電池剩餘容量
self.electric2distance_ratio = 5 #電池距離換算係數
self.remainder_range = self.electric_quantity*self.electric2distance_ratio #剩餘可行駛旅程
def get_electric_quantity(self):
"""查看當前電池容量"""
print("當前電池剩餘電量:{} kw.h".format(self.electric_quantity))
#使用子類
my_electric_car = ElectricCar1("NewWeek","FF91",2046,70)
my_electric_car.get_electric_quantity()
#重寫父類的方法--多態 同樣的方法 在不同的子類裏面有不同的表達方式
class ElectricCar2(Car):
"""模擬電動汽車"""
#新傳入電池容量數據
def __init__(self,brand,model,year,bettery_size):
super().__init__(brand,model,year) #聲明繼承父類的屬性,此時子類自動繼承父類方法
self.bettery_size = bettery_size #電池容量
self.electric_quantity = bettery_size #電池剩餘容量
self.electric2distance_ratio = 5 #電池距離換算係數
self.remainder_range = self.electric_quantity*self.electric2distance_ratio #剩餘可行駛旅程
def get_main_infomation(self): #重寫父類方法
"""獲取汽車主要信息"""
print("品牌:{} 型號:{} 出廠年份:{} 續航裏航:{}公里"
.format(self.brand,self.model,self.year,self.bettery_size*self.electric2distance_ratio))
#調用
my_electric_car = ElectricCar2("NextWeek","FF91",2046,70)
my_electric_car.get_main_infomation()
#用在類中的實例 把電池抽象成一個對象 邏輯更加清晰
class Bettery():
"""模擬電動汽車的電池"""
def __init__(self,bettery_size = 70):
self.bettery_size = bettery_size # 電池容量
self.electric_quantity = bettery_size # 電池剩餘容量
self.electric2distance_ratio = 5 # 電池距離換算係數
self.remainder_range = self.electric_quantity * self.electric2distance_ratio # 剩餘可行駛旅程
def get_electric_quantity(self):
"""查看當前電池容量"""
print("當前電池剩餘電量:{} kw.h".format(self.electric_quantity))
#重新構造電動汽車類 使模塊更加清晰
class ElectricCar4(Car):
"""模擬電動汽車"""
def __init__(self,brand,model,year,bettery_size):
"""初始化電動汽車屬性"""
super().__init__(brand,model,year) #聲明繼承父類的屬性,此時子類自動繼承父類方法
self.bettery = Bettery(bettery_size) #創建電池實例,並且把這個屬性賦值給bettery
def get_main_infomation(self):
"""獲取汽車主要信息"""
print("品牌:{} 型號:{} 出廠年份:{} 續航裏航:{}公里"
.format(self.brand, self.model, self.year, self.bettery.bettery_size * self.bettery.electric2distance_ratio))
#調用
my_electric_car = ElectricCar2("NextWeek","FF91",2046,70)
my_electric_car.get_main_infomation()