使用類的三步驟
- Step 1. 定義類
類是對(duì)象的藍(lán)圖和模板 有了類就可以創(chuàng)建對(duì)象
定義類需要做的兩件事情:數(shù)據(jù)抽象和行為抽象
數(shù)據(jù)抽象 - 抽取對(duì)象共同的靜態(tài)特征(找名詞) - 屬性
行為抽象 - 抽取對(duì)象共同的動(dòng)態(tài)特征(找動(dòng)詞) - 方法
定義類的關(guān)鍵字 - class - 類名(每個(gè)單詞的首字母大寫)
- Step 2. 調(diào)用構(gòu)造方法創(chuàng)建學(xué)生對(duì)象
實(shí)際上調(diào)用的是Student類中init方法
- Step 3. 給對(duì)象發(fā)出消息
通過給對(duì)象發(fā)消息讓對(duì)象完成某些工作就
解決任何的問題都是通過讓對(duì)象去做事情
修改屬性的值
- 通過直接訪問屬性進(jìn)行修改
- 通過方法修改屬性的值 - 傳參
- 通過方法對(duì)屬性的值進(jìn)行遞增
練習(xí):計(jì)算長方形的周長和面積
class Rect:
def __init__(self, lenght, width):
self.lenght = lenght
self.width = width
def area(self):
return self.lenght * self.width
def week_lenght(self):
return (self.lenght + self.width) * 2
def mian():
ret1 = Rect(26, 20)
print(ret1.area())
print(ret1.week_lenght())
if __name__ == '__main__':
main()
練習(xí):時(shí)鐘顯示
from time import sleep
class Clock:
def __init__(self, hour, minute, second):
self.hour = hour
self.minute = minute
self.second = second
def display(self):
while True:
print('目前的時(shí)間是:%d:%d:%d' % (self.hour, self.minute, self.second))
self.second += 1
if self.second == 60:
self.minute += 1
if self.minute == 60:
self.hour += 1
self.hour %= 60
self.minute %= 60
self.second %= 60
sleep(1)
def main():
clock1 = Clock(0, 0, 0)
clock1.display()
if __name__ == '__main__':
main()
繼承
編寫類時(shí)斤寇,并非總是要從空白開始舷蟀。如果你要編寫的類是另一個(gè)現(xiàn)成類的特殊版本汤善,可使用繼承 洞难。一個(gè)類繼承 另一個(gè)類時(shí),它將自動(dòng)獲得另一個(gè)類的所有屬性和方法;原有的類稱為父類 援所,而新類稱為子類 庐舟。子類繼承了其父類的所有屬性和方法,同時(shí)還可以定義自己的屬性和方法住拭。
重寫類方法
對(duì)于父類的方法挪略,只要它不符合子類模擬的實(shí)物的行為,都可對(duì)其進(jìn)行重寫滔岳。為此杠娱,可在子類中定義一個(gè)這樣的方法,即它與要重寫的父類方法同名谱煤。這樣摊求,Python將不會(huì)考慮這個(gè)父類方法,而只關(guān)注你在子類中定義的相應(yīng)方法刘离。
class Car(object):
"""一次模擬汽車的簡單嘗試"""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class Battery():
def __init__(self, battery_size=70):
self.battery_size = battery_size
def get_range(self):
"""打印一條消息室叉,指出電瓶的續(xù)航里程"""
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270
def describe_battery(self):
"""打印一條描述電瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
class ElectricCar(Car):
# """電動(dòng)汽車的獨(dú)特之處"""
def __init__(self, make, model, year):
"""初始化父類的屬性"""
# super() 是一個(gè)特殊函數(shù),幫助Python將父類和子類關(guān)聯(lián)起來
super().__init__(make, model, year)
self.battery_size = 70
self.battery = Battery()
def describe_battery(self):
"""打印一條描述電瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
if __name__ == '__main__':
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
導(dǎo)入類
隨著你不斷地給類添加功能硫惕,文件可能變得很長茧痕,即便你妥善地使用了繼承亦如此。為遵循Python的總體理念恼除,應(yīng)讓文件盡可能整潔踪旷。為在這方面提供幫助,Python允許你將類存儲(chǔ)在模塊中豁辉,然后在主程序中導(dǎo)入所需的模塊令野。
#將上面的類導(dǎo)入另一個(gè)程序中
from car import ElectricCar
#可以導(dǎo)入多個(gè)類
from car import Car, ElectricCar
#導(dǎo)入模塊中的所有類
from module_name import *
#導(dǎo)入整個(gè)模塊
from car