學習了一天的python,想對python中的類-class,對象,方法,屬性等概念做個簡單的總結。
What Is an Object?
Objects are key to understanding object-oriented technology. Look around right now and you'll find many examples of real-world objects: your dog, your desk, your television set, your bicycle.
對象的概念在面向對象編程的技術中非常關鍵。觀察周圍的環境,你會發現很多現實世界中的例子:你的狗,你的桌子,你的電視,你的自行車
引自:http://docs.Oracle.com/javase/tutorial/java/concepts/object.html
現實世界中的對象共享2個特點:狀態和行為
比如狗的狀態(名字,顏色,品種,饑餓),行為(狗吠,搖尾巴)
自行車也有狀態(現在的傳動裝置,現在的腳踏板的節奏,現在的速度),行為(剎閘,改變腳踏板的行為)
去識別現實世界中的對象的狀態和行為能夠幫助我們非常好的理解面向對象編程的思想
現在花一點時間去觀察現實世界中的對象。對于你看到的每一個對象,都要問自己2個問題:“這個對象可能處在什么樣的狀態”,他能執行什么可能的行為。如果你這么做了,你就會注意到現實世界中的對象可能會有所不同,你桌子上的臺燈可能只有2個可能的狀態(開和關),2個可能的行為(打開和關閉)
但是你桌子上面的收音機可能會有額外的狀態和行為,狀態(開,關,現在的音量,現在的電臺),行為(打開,關閉,調大音量,降低音量,搜索,瀏覽,tune)
這些真實世界中的觀察結果都被傳送到面向對象編程的程序中。

軟件中的“object”和真實世界中的對象的概念非常相似:他們也是由state和related behavior組成。
一個對象在field(變量)中存儲他的state,之后通過他的方法methods(functions)來暴露出他的行為。方法操作內部的狀態,充當object-to-object 交流的首選機制
通過對象的方法,隱藏了內部的狀態和執行了相關的操作,這就是傳說中的數據封裝--------- 一個面向對象的基本原理
Consider a bike, 比如

A bicycle modeled as a software object.
通過歸因于state(現在的速度,現在的腳踏節奏)和提供改變狀態的方法,對象仍舊受控于外部世界怎樣使用它。
比如,如果這個自行車有6個齒輪,如果輸入的值小于1或者大于6,一個改變齒輪的方法可能被拒絕。
把代碼打包到單個對象中,提供了很多好處,包括:
模塊化:對象的source code可以單獨的寫和維護。一旦創建,一個對象可以輕易地傳送到系統內部信息隱蔽:只對一個對象交互的方法,其內部實現的細節仍然隱藏與外界的聯系代碼重用:如果一個對象已經存在(或許是被另外一個developer寫的),你可以使用那個對象在你的程序中。這允許專家實現/測試/調試復雜,特定于任務的對象,你可以相信在您自己的代碼中運行。可插入性和調試方便:如果一個指定的對象被證明有問題,你可以很容易的從你的程序中移除他,并且plug一個不同的對象去替換他。這和現實世界中修理機制非常類似,如果一個部件壞了,你不需要去更換整部機器所以什么是對象呢,在python中一切都可以是對象,只要你指明他可能出現的狀態,和操控狀態的方法
Python 中的對象是 C 語言中結構體在堆上申請的一片內存區域。
What Is a Class?
In the real world, you'll often find many individual objects all of the same kind. There may be thousands of other bicycles in existence, all of the same make and model. Each bicycle was built from the same set of bluePRints and therefore contains the same components. In object-oriented terms, we say that your bicycle is an instance of theclass of objects known as bicycles. Aclass is the blueprint from which individual objects are created.
The following Bicycle
class is one possible implementation of a bicycle:
在現實世界中,你通常情況下會需要去尋找很多單獨的對象但是他們的種類確是相同的。 現在可能有成千上萬的自行車存在,all of the same make and model.每一個自行車都是用同一個藍圖來制作的,因此都含有相同的屬性。在面向對象的terms中,we say that 你的自行車是一個對象的類的instance。這個mode 簡化為 自行車(對象)---藍圖(類)---你的自行車。
下文參考此鏈接:http://blog.chinaunix.net/uid-15174104-id-3826306.html
言歸正傳,今天我們要了解的是Python的中對象(Objects)。Python的官方文檔是這樣描述Python中的對象的。Objects are Python’s abstraction for data. All data in a Python program is representedby objectsor by relations between objects.
python中的對象是對數據的描述。python程序中的所有data都可以代表對象(所以我覺得是不是此時
Python把所有的一切都認為是對象(Objects), 這就是那句著名的話 "Everything is an object in Python"。實際上,對象(Objects)是Python對于數據的一種抽象。在Python程序中,所有的數據都是通過對象或者對象之間的關系來表示的。 Python中的對象有由三個部分組成: 標示(identity),類型(type)和值(value)。
標示(identity)
每一個對象都是唯一的。我們可以用對象的標示(identity)來比較兩個對象,即使用 is語句。我們可以把對象的標示(identity)看做是對象在內存中的地址。當一個對象一旦被創建,它的標示(identity)將不再改變直到這個對象消失。當對象消失后,它的標示(identity)將會被釋放,并可能被未來的一個對象來使用。所以,對象的標示是唯一的,不變的,并存在于對象的整個生命周期。為了更形象的說明什么是對象的標示(identity),我們可以用Python中內建函數id()來返回一個對象的標示(identity)。
說的直白些,對象的標示(identity)其實就是一個整數,它是對象在內存中的地址。
類型(type) 對象的類型(type)則決定了對象支持什么樣的操作和運算,可以被賦予什么樣的值。 內建函數type()返回的是當前所給對象的類型。同對象的標示(identity)一樣,類型(type)也是不可變的【1】 。
值(value) 對象的是值本身也是一個對象,且它和對象有同樣的的類型(type)。有些對象的值是可變的,有些對象的值是不可變的。我們把那些值可以變化的對象叫做可變對象(mutable objects),把那些值不可變的對象叫做不變對象(immutable objects)。一個對象的易變性(mutability)是由這個對象的類型(type)來決定的。比如,數字(numbers),字符串(strings),元組(tuples)是不可變的,而字典(dictionaries),列表(lists )是可變的。對象從來不會顯示地消失,如果某個對象不再被使用后,它們會在垃圾回收后變的不可以用。至此,我們已經對Python對象有了基本的了解。下次,我們將深入講解Python對象的一些特性。敬請期待!