Python基礎09 物件導向的進一步拓展

來源:互聯網
上載者:User

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

 

上一講我們熟悉了對象和類的基本概念。這一講我們將進一步拓展,以便我們真正能實際運用對象和類。

1. 在方法內調用類屬性(變數以及其它方法):

上一講我們已經提到,在定義方法時,必須有self這一參數,這個參數指的是對象。由於對象擁有類的所有性質,那麼我們就可以在方法內部通過self來調用類的其它屬性。

class Human(object):    laugh = 'hahahaha'    def show_laugh(self):        print self.laugh    def laugh_100th(self):        for i in range(100):            self.show_laugh()

li_lei = Human()              # 李雷
li_lei.laugh_100th()

我們這裡有一個變數屬性laugh,在方法show_laugh()中通過self.laugh使用該屬性的值。方法show_laugh則在laugh_100th中通過self.show_laugh()被調用。

(通過對象來修改類屬性是危險的,這樣可能會影響根據這個類定義的所有對象的這一屬性!!)

 

2. __init__()方法

__init__()是一個特殊方法(special method)。Python裡會有一些特殊方法,Python會以特別的方式處理它們。特殊方法的名字的特點是前後都有兩個底線。

__init__()方法的特殊在於,如果你在類中定義了這個方法,一旦你根據這個類建立對象,Python就會自動調用這個方法(這個過程也叫初始化)。(在上一講中,我們手動調用了move()方法)

class happyBird(Bird):    def __init__(self,more_words):        print 'We are happy birds.',more_words
summer = happyBird('Happy,Happy!')

(Bird類的定義見上一講)

螢幕上列印出:

We are happy birds.Happy,Happy!

我們看到,儘管我們只是建立了summer對象,但__init__()方法被自動調用了。最後一行的語句(summer = happyBird...)先建立了對象,然後執行:

summer.__init__(more_words)

'Happy,Happy!' 被傳遞給了__init__()的參數more_words

 

3. 對象的性質

上一講我們講了變數屬性和方法屬性。要注意,這些屬性是類的屬性。所有屬於一個類的對象都會共用這些屬性。比如說,鳥都有羽毛,雞都不會飛。

在一些情況下,我們需要用到對象的性質。比如說,人是一個類別,我們知道,性別是人類的一個性質,但並不是所有的人類都是男性或者所有的人類都是女性。這個性質的值會隨著對象的不同而不同。(李雷是人類的一個對象,性別是男;韓美美也是人類的一個對象,性別是女)。

從上一講中,我們已經知道了,當定義類的方法時,必須要傳遞一個self的參數。這個參數指代的就是類的一個對象。當然,這是一個很模糊的一個概念。但一旦我們用類來建立一個對象(比如說我們下面例子中的li_lei), 那麼li_lei就是self所代表的東西。我們已經知道了,li_lei會擁有Human類的屬性。進一步,我們通過賦值給self.attribute,給li_lei這一對象增加一些性質(比如說性別)。由於self強制傳遞給各個方法,方法可以通過引用self.attribute很方便地查詢到這些性質,並進行進一步的操作。

這樣,我們在類的屬性統一的基礎上,又給每個對象增添了各自特色的性質,從而能描述多樣的世界。

class Human(object):    def __init__(self, input_gender):        self.gender = input_gender    def printGender(self):        print self.genderli_lei = Human('male') # 這裡,'male'作為參數傳遞給__init__()方法的input_gender變數。
print li_lei.genderli_lei.printGender()

首先,在初始化中,將參數input_gender賦值給對象li_lei的性質gender。(上一講,我們已經提到,self指示的是對象, 也就是li_lei)

我們發現,li_lei擁有了屬性gender。在類human的定義中,並沒有這樣一個變數屬性。Python是在建立了li_lei這一對象之後,專門為li_lei建立的屬性。我們稱此為對象的性質。(也有人以類屬性,對象屬性來區分)。

對象的性質也可以被其它方法調用,正如我們在printGender方法中所看到的那樣。

 

總結:

通過self調用類屬性

__init__(): 在建立對象時自動執行

類屬性和對象的性質的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.