Python - 類與對(duì)象

使用類的三步驟

  • 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市秋忙,隨后出現(xiàn)的幾起案子彩掐,更是在濱河造成了極大的恐慌,老刑警劉巖灰追,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堵幽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弹澎,警方通過查閱死者的電腦和手機(jī)朴下,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苦蒿,“玉大人殴胧,你說我怎么就攤上這事。” “怎么了团滥?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵竿屹,是天一觀的道長。 經(jīng)常有香客問我灸姊,道長拱燃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任力惯,我火速辦了婚禮碗誉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘父晶。我一直安慰自己哮缺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布甲喝。 她就那樣靜靜地躺著尝苇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俺猿。 梳的紋絲不亂的頭發(fā)上茎匠,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音押袍,去河邊找鬼。 笑死凯肋,一個(gè)胖子當(dāng)著我的面吹牛谊惭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侮东,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼圈盔,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了悄雅?” 一聲冷哼從身側(cè)響起驱敲,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宽闲,沒想到半個(gè)月后众眨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡容诬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年娩梨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片览徒。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狈定,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纽什,我是刑警寧澤措嵌,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站芦缰,受9級(jí)特大地震影響企巢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饺藤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一包斑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涕俗,春花似錦罗丰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至元镀,卻和暖如春绍填,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栖疑。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工讨永, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遇革。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓卿闹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親萝快。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锻霎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容