第九章:類


2018年10月25日

9.1 創(chuàng)建類

下面編寫一個表示汽車的類油昂,它存儲了有光汽車的信息,還有一個匯總這些信息的方法:

# car.py
class Car():
    """一次模擬汽車的簡單嘗試"""
    
    def __init__(self, make, model, year, gas_tank_capacity=60):    # 屬性初始化默認(rèn)值
        """初始化描述汽車的屬性"""
        self.make = make
        self.model = model
        self.year = year
        self.__gas_tank_capacity = gas_tank_capacity
        self.gas_tank_indicator = 0
        self.odometer_reading = 0    # 給屬性指定默認(rèn)值

    def get_descriptive_name(self):    # 方法調(diào)用屬性的值
        """返回整潔的描述性信息"""
        long_name = ' '.join([str(self.year), self.make, self.model])
        return long_name.title()

    def fill_gas_tank(self):
        """加滿油箱"""
        self.gas_tank_indicator = self.__gas_tank_capacity

    def update_odometer(self, mileage):    # 通過方法修改屬性的值
        """將里程表讀數(shù)設(shè)置為指定的值"""
        self.odometer_reading = mileage

9.2 繼承

編寫類時童社,并非總是要從空白開始溯警。如果要編寫的類是另一個現(xiàn)成類的特殊版本,可使用繼承年柠。一個類繼承另一個類時凿歼,它將自動獲得另一個類的所有屬性和方法;原有的類稱為父類冗恨,而新類稱為子類答憔。子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法掀抹。

9.2.1 子類的方法__init__()

創(chuàng)建子類的實(shí)例時虐拓,Python首先需要完成的任務(wù)是給父類的所有屬性賦值。為此子類的方法__init__()需要父類施以援手傲武。
下面來模擬電動汽車蓉驹,在前面創(chuàng)建的Car類的基礎(chǔ)上類創(chuàng)建新類ElectricCar。

# electric_car.py
from car import Car    # 從模塊中導(dǎo)入類

class Battery():
    """一次模擬電動汽車電瓶的簡單嘗試"""
    
    def __init__(self, battery_size=70):
        """初始化電瓶的屬性"""
        self.battery_size = battery_size

    def describe_battery(self):
        """打印一條描述電瓶容量的信息"""
        print("This car has a " + str(self.battery_size) + "-kWh battery")


class ElectricCar(Car):
    """電動汽車的獨(dú)特之處"""
    
    def __init__(self, make, model, year):
        """初始化父類的屬性揪利,再初始化電動汽車特有的屬性"""
        super().__init__(make, model, year)

        self.battery_size = Battery()    # 將Battery類的實(shí)例用作屬性

    def fill_gas_tank(self):    # 重寫父類的方法
        """電動汽車沒有郵箱"""
        print("This car doesn't need a gas tank!")

9.2.2 Python 2.7 中的繼承

在Python2.7中态兴,繼承語法稍有不同,ElectricCar類的定義類似下面這樣:

class Car(object):
    --snip--

class ElectricCar(Car):
    def __init__(self, make, model, year):
        super(ElectricCar, self).__init__(make, model, year)
        --snip--

函數(shù)super()需要兩個實(shí)參:子類名和對象self疟位。另外在Python 2.7中實(shí)現(xiàn)繼承時瞻润,務(wù)必在定義父類時在括號內(nèi)指定object

9.3 使用類

創(chuàng)建實(shí)例后,就可以通過句點(diǎn)表示法訪問實(shí)例的屬性和方法绍撞。下面是根據(jù)類創(chuàng)建實(shí)例后的測試

>>> from electric_car import ElectricCar 
>>> my_car = ElectricCar('Telsa', 'Model S', 2016)
>>> my_car.get_descriptive_name()
'2016 Telsa Model S'
>>> my_car.gas_tank_indicator
0
>>> my_car.fill_gas_tank()
This car do not need a gas tank!
>>> my_car.odometer_reading
0
>>> my_car.update_odometer(10)
>>> my_car.odometer_reading
10
>>> my_car.battery_size.describe_battery()
This car has a 70-kWh battery

可以看到子類ElectricCar仍然繼承了Car類的gas_tank_indicator屬性正勒,因?yàn)樵谧宇愓{(diào)用super().__init__()時仍然調(diào)用了父類的__init()__方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楚午,一起剝皮案震驚了整個濱河市昭齐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矾柜,老刑警劉巖阱驾,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怪蔑,居然都是意外死亡里覆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門缆瓣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喧枷,“玉大人,你說我怎么就攤上這事弓坞∷砩酰” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵渡冻,是天一觀的道長戚扳。 經(jīng)常有香客問我,道長族吻,這世上最難降的妖魔是什么帽借? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮超歌,結(jié)果婚禮上砍艾,老公的妹妹穿的比我還像新娘。我一直安慰自己巍举,他們只是感情好脆荷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懊悯,像睡著了一般简烘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上定枷,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音届氢,去河邊找鬼欠窒。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岖妄。 我是一名探鬼主播型将,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荐虐!你這毒婦竟也來了七兜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤福扬,失蹤者是張志新(化名)和其女友劉穎腕铸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铛碑,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狠裹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了汽烦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涛菠。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撇吞,靈堂內(nèi)的尸體忽然破棺而出俗冻,到底是詐尸還是另有隱情,我是刑警寧澤牍颈,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布迄薄,位于F島的核電站,受9級特大地震影響颂砸,放射性物質(zhì)發(fā)生泄漏噪奄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一人乓、第九天 我趴在偏房一處隱蔽的房頂上張望勤篮。 院中可真熱鬧,春花似錦色罚、人聲如沸碰缔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金抡。三九已至,卻和暖如春腌且,著一層夾襖步出監(jiān)牢的瞬間梗肝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工铺董, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巫击,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像坝锰,于是被迫代替她去往敵國和親粹懒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

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