Python學(xué)習(xí)第八天——《A Byte of Python》筆記 8

Let it be

繼續(xù)面向?qū)ο缶幊痰膶W(xué)習(xí)

classes(類)

class Person:
    pass  #An empty block
p=Person()
print(p)

Outport:

<main.Person object at 0x00000203E858F8D0>

這是類的一個(gè)最簡單的例子。說明main 模塊中有了一個(gè)Person 類的實(shí)例昔驱,“0x00000203E858F8D0”是對(duì)象在計(jì)算機(jī)內(nèi)存的地址。

Methods(方法)

類的方法和函數(shù)類似过咬,區(qū)別只是一個(gè)額外的self變量嗤栓。

class Fans:
    def sayHi(self):
        print("I'm a basketball fan. I like Jordan.")
bf=Fans()
bf.sayHi()

Outport:

I'm a basketball fan. I like Jordan.

注意sayHi 方法沒有任何參數(shù)蚓哩,但仍然在函數(shù)定義時(shí)有self。

The __ init __ Method(__init __方法)

Python 的類中有很多方法的名字有特殊的重要意義癞埠。init 方法在類的一個(gè)對(duì)象被建立時(shí)馬上運(yùn)行鸽粉。這個(gè)方法可以用來對(duì)你的對(duì)象做一些你希望的初始化斜脂。注意,這個(gè)名稱的開始和結(jié)尾都是雙下劃線触机。

class Person:
    def __init__(self,name):
        self.name=name
    def say_hi(self):
        print("I'm a basketball fun, I like ",self.name)
#p=Person('Mike Jordan')
#p.say_hi()
p=Person('Mike Jordan').say_hi()

Output

I'm a basketball fun, I like Mike Jordan

Class And Object Variables(類和對(duì)象變量)

有兩種類型的域—— 類的變量和對(duì)象的變量帚戳,它們根據(jù)是類還是對(duì)象擁有這個(gè)變量而區(qū)分。
類的變量由一個(gè)類的所有對(duì)象(實(shí)例)共享使用儡首。只有一個(gè)類變量的拷貝片任,所以當(dāng)某個(gè)對(duì)象對(duì)類的變量做了改動(dòng)的時(shí)候,這個(gè)改動(dòng)會(huì)反映到所有其他的實(shí)例上蔬胯。
對(duì)象的變量由類的每個(gè)對(duì)象/實(shí)例擁有对供。因此每個(gè)對(duì)象有自己對(duì)這個(gè)域的一份拷貝,即它們不是共享的氛濒,在同一個(gè)類的不同實(shí)例中产场,雖然對(duì)象的變量有相同的名稱,但是是互不相關(guān)的舞竿。

class Robot:
    """Represents a robot, with a name."""

    # A class variable, counting the number of robots
    population = 0

    def __init__(self, name):
        """Initializes the data."""
        self.name = name
        print("(Initializing {})".format(self.name))

        # When this person is created, the robot
        # adds to the population
        Robot.population += 1

    def die(self):
        """I am dying."""
        print("{} is being destroyed!".format(self.name))

        Robot.population -= 1

        if Robot.population == 0:
            print("{} was the last one.".format(self.name))
        else:
            print("There are still {:d} robots working.".format(
                Robot.population))

    def say_hi(self):
        """Greeting by the robot.

        Yeah, they can do that."""
        print("Greetings, my masters call me {}.".format(self.name))

    @classmethod
    def how_many(cls):
        """Prints the current population."""
        print("We have {:d} robots.".format(cls.population))


droid1 = Robot("R2-D2")
droid1.say_hi()
Robot.how_many()

droid2 = Robot("C-3PO")
droid2.say_hi()
Robot.how_many()

print("\nRobots can do some work here.\n")

print("Robots have finished their work. So let's destroy them.")
droid1.die()
droid2.die()

Robot.how_many()

Outport:

(Initializing R2-D2)
Greetings, my masters call me R2-D2.
We have 1 robots.
(Initializing C-3PO)
Greetings, my masters call me C-3PO.
We have 2 robots.

Robots can do some work here.

Robots have finished their work. So let's destroy them.
R2-D2 is being destroyed!
There are still 1 robots working.
C-3PO is being destroyed!
C-3PO was the last one.
We have 0 robots.

Inheritance(繼承)

面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用京景,途徑之一是通過繼承機(jī)制。繼承完全可以理解成執(zhí)行類之間的類型和子類型關(guān)系骗奖。
假設(shè)你想要寫一個(gè)程序來記錄學(xué)校之中的教師和學(xué)生情況确徙。他們有一些共同屬性,比如姓名执桌、年齡和地址鄙皇。他們也有專有的屬性,比如教師的薪水仰挣、課程和假期伴逸,學(xué)生的成績和學(xué)費(fèi)。你可以為教師和學(xué)生建立兩個(gè)獨(dú)立的類來處理它們膘壶,但是這樣做的話违柏,如果要增加一個(gè)新的共有屬性,就意味著要在這兩個(gè)獨(dú)立的類中都增加這個(gè)屬性香椎。
一個(gè)比較好的方法是創(chuàng)建一個(gè)共同的類稱為SchoolMember, 然后讓教師和學(xué)生的類繼承這個(gè)共同的類禽篱。即它們都是這個(gè)類型(類)的子類型畜伐,然后我們?cè)贋檫@些子類型添加專有的屬性。
使用這種方法有很多優(yōu)點(diǎn)躺率。如果我們?cè)黾?改變了SchoolMember 中的任何功能玛界,它會(huì)自動(dòng)地反映到子類型之中万矾。例如,你要為教師和學(xué)生都增加一個(gè)新的身份證域慎框,那么你只需簡單地把它加到SchoolMember 類中良狈。然而,在一個(gè)子類型之中做的改動(dòng)不會(huì)影響到別的子類型笨枯。另外一個(gè)優(yōu)點(diǎn)是你可以把教師和學(xué)生對(duì)象都作為SchoolMember 對(duì)象來使用薪丁,這在某些場(chǎng)合特別有用,比如統(tǒng)計(jì)學(xué)校成員的人數(shù)馅精。一個(gè)子類型在任何需要父類型的場(chǎng)合可以被替換成父類型严嗜,即對(duì)象可以被視作是父類的實(shí)例,這種現(xiàn)象被稱為多態(tài)現(xiàn)象洲敢。
另外漫玄,我們會(huì)發(fā)現(xiàn)在重用父類的代碼的時(shí)候,我們無需在不同的類中重復(fù)它压彭。而如果我們使用獨(dú)立的類的話睦优,我們就不得不這么做了。
在上述的場(chǎng)合中壮不,SchoolMember 類被稱為基本類超類汗盘。而Teacher 和Student類被稱為導(dǎo)出類子類

class SchoolMember:
    '''Represents any school member.'''
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('(Initialized SchoolMember: {})'.format(self.name))

    def tell(self):
        '''Tell my details.'''
        print('Name:"{}" Age:"{}"'.format(self.name, self.age), end=" ")


class Teacher(SchoolMember):
    '''Represents a teacher.'''
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self, name, age)
        self.salary = salary
        print('(Initialized Teacher: {})'.format(self.name))

    def tell(self):
        SchoolMember.tell(self)
        print('Salary: "{:d}"'.format(self.salary))


class Student(SchoolMember):
    '''Represents a student.'''
    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print('(Initialized Student: {})'.format(self.name))

    def tell(self):
        SchoolMember.tell(self)
        print('Marks: "{:d}"'.format(self.marks))

t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)

# prints a blank line
print()

members = [t, s]
for member in members:
    # Works for both Teachers and Students
    member.tell()

OutPort:

(Initialized SchoolMember: Mrs. Shrividya)
(Initialized Teacher: Mrs. Shrividya)
(Initialized SchoolMember: Swaroop)
(Initialized Student: Swaroop)

Name:"Mrs. Shrividya" Age:"40" Salary: "30000"
Name:"Swaroop" Age:"25" Marks: "75"


summary

面向?qū)ο髮?duì)我而言忆畅,理解總是有點(diǎn)問題衡未,這個(gè)在學(xué)習(xí)C#時(shí)就存在,因此花了兩天看完這一章家凯,也算無奈之舉缓醋。即使多花了一天,覺得現(xiàn)在也只是理解了80%绊诲,而不是百分百貫通送粱,要在以后的學(xué)習(xí)中進(jìn)一步鞏固加強(qiáng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掂之,一起剝皮案震驚了整個(gè)濱河市抗俄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌世舰,老刑警劉巖动雹,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異跟压,居然都是意外死亡胰蝠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茸塞,“玉大人躲庄,你說我怎么就攤上這事〖嘏埃” “怎么了噪窘?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長效扫。 經(jīng)常有香客問我倔监,道長,這世上最難降的妖魔是什么荡短? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任丐枉,我火速辦了婚禮,結(jié)果婚禮上掘托,老公的妹妹穿的比我還像新娘瘦锹。我一直安慰自己,他們只是感情好闪盔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布弯院。 她就那樣靜靜地躺著,像睡著了一般泪掀。 火紅的嫁衣襯著肌膚如雪听绳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天异赫,我揣著相機(jī)與錄音椅挣,去河邊找鬼。 笑死塔拳,一個(gè)胖子當(dāng)著我的面吹牛鼠证,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播靠抑,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼量九,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了颂碧?” 一聲冷哼從身側(cè)響起荠列,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎载城,沒想到半個(gè)月后肌似,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诉瓦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年锈嫩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了受楼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呼寸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猴贰,到底是詐尸還是另有隱情对雪,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布米绕,位于F島的核電站瑟捣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栅干。R本人自食惡果不足惜迈套,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碱鳞。 院中可真熱鬧桑李,春花似錦、人聲如沸窿给。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崩泡。三九已至禁荒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間角撞,已是汗流浹背呛伴。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谒所,地道東北人热康。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像百炬,于是被迫代替她去往敵國和親褐隆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法剖踊,類相關(guān)的語法庶弃,內(nèi)部類的語法,繼承相關(guān)的語法德澈,異常的語法歇攻,線程的語...
    子非魚_t_閱讀 31,631評(píng)論 18 399
  • layout: "post"tags: 筆記 Python 教程 入門categories: program 第 ...
    蕭子柔閱讀 1,170評(píng)論 0 0
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,970評(píng)論 6 13
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,715評(píng)論 0 9
  • 文/張梓夏 我比不上一片海 它億萬年前就已存在 日后也不會(huì)輕易覆滅 吞吐著潮汐 一聲一聲 即使沒有神教導(dǎo)它這樣做 ...
    程烏青閱讀 1,021評(píng)論 27 37