問題:什麼是對象python
世間一切萬物皆是「對象」 一我的 一棵樹 一朵花 只要是存在的事物 均可以被稱之爲「對象」
對象的形態千千萬萬,若是加以管理呢,因此世界上出現了大陸,不一樣的大陸分割着不一樣大洲,不一樣的大洲區分這不一樣的國家,不一樣的國家又有不一樣的省份 類推...
類比到程序中,咱們想要完成一個龐大的項目時須要寫出許許多多的功能,這一個個的功能形態萬千 姿態萬千,咱們若是能區分並分別管理他們呢?
咱們把這一個個模塊 經過類似的功能 給分類,分完類再分工,這樣整個項目就能扁平化鋪開,每一個人負責一塊,這樣才最有效率。
對象和類編程
世間萬物皆可分類,一花一草 一樹一木 一人一畜
人分爲男人 女人 老人 小孩, 動物分爲 貓 狗 鼠... 這些個事物都是對象,可是他們都能找到一個共同點,人 和 動物,植物....
因此 類 能夠理解爲他們的共同特徵。
人:有手腳 能說話 站立行走
動物 :有毛髮 四肢行走 這樣就產生了類。
那麼 請思考,爲何要有類呢
爲何要有類函數
一家啤酒瓶廠,天天產出啤酒瓶爲10幾萬個,咱們看到自動生產線上的機器直接將玻璃水作成了啤酒瓶,這是怎麼作到的呢?
這是由於,人們將製做方法,工藝,材料,溫度,過程,輸入到了機器中,這樣。
玻璃融化生產線,直接調用電腦的溫度數據
材質生產線,直接調用材料的數據
機器直接調用製做方法和工藝的數據
這樣,這條生產線就完成了自動生產。
對於各個生產線來講,這臺中心電腦的數據 則是本身的類。
那麼 這個例子和咱們程序有什麼關係呢?
面向對象編程性能
面向對象編程
例:咱們要利用python開發一款模擬人生的遊戲,如今我要創造一我的物
這我的物有人類的特徵,會吃飯,戰鬥,情感表現。
可是,這個遊戲會有不少的人物,因此咱們把這些個共通特徵建立爲一個類,在類種建立更多種功能:方法,把吃飯,戰鬥,表現集成到類中
這樣每個人物都來調用類中的方法,這樣,就大量節約了開發成本,而且增長了代碼的邏輯性!
以上就是我對面向對象的理解spa
那麼,如何來編寫一個面向對象的程序呢?code
class person(object): #country = '中國' def __init__(self): pass def eating(self): print 'im eating ' def play(self): print 'im playing' def kiss(self): print 'give me one kiss' me = person()#類的實例化 me.kiss() me.eating() #print 'me 是 類person 的實例對象,經過實例化後 me對象就能夠陰用類中的方法'
類的特性:對象
類中有哪些成員呢?
類包含,字段,方法,屬性。
可是每一個成員中,都包含私有成員 因此說類中有 普通字段 私有字段 普通方法 私有方法 普通屬性 私有屬性
字段blog
普通字段
class Person: name = 'alex' age = 18 P1 = Person() #實例化了一個對象P1 print P1.name #而後就能夠經過P1來讀取屬性了 print P1.age # name , age 是類的公有屬性 # 能夠直接在類外經過對象名訪問,私有屬性,需在前面加2個下劃線'__'便可。
上面說到私有屬性,那麼私有屬性可否被訪問呢不過這裏建議,既然是私有屬性,那麼就不該該隨意去訪問它
私有字段
class Person: __name = 'alex' #建立了私有字段 __age = 18 P1 = Person() #實例化了一個對象P1 print P1.Person.__name #而後就能夠經過P1來讀取私有屬性了 print P1.Person.__age
方法遊戲
普通方法
class person(object): #country = '中國' def __init__(self): pass def eating(self): print 'im eating ' def play(self): print 'im playing' def kiss(self): print 'give me one kiss' me = person()#類的實例化 me.kiss() me.eating() #print 'me 是 類person 的實例對象,經過實例化後 me對象就能夠陰用類中的方法'
私有方法 調用
class person(object): #country = '中國' def __init__(self): pass def __eating(self): #私有方法是不容許對象直接調用的, 若是像調用能夠間接調用 print 'im eating ' def d_eating(self): return person.__eating #經過在類中的通常方法來調用私有方法 def __play(self): print 'im playing' def __kiss(self): print 'give me one kiss' me = person()#類的實例化 me.d_eating() me.eating()#這種調用 是錯誤 #print 'me 是 類person 的實例對象,經過實例化後 me對象就能夠陰用類中的方法'
屬性開發
什麼是屬性呢,請看下面代碼 class person(object): #country = '中國' def __init__(self): pass
@property #屬性和方法的區別是,這裏使用了一個裝飾器函數 def eating(self): print 'im eating ' me = person()#類的實例化 me.eating #重要的是,在對象調用屬性的時候,直接按照調用字段的方式就能夠了, 這樣就把方法僞形成了普通字段。而且意義就這裏!
定義屬性有兩種方式 1,經典類 # ############### 定義 ############### class Goods: @property def price(self): return "wupeiqi" # ############### 調用 ############### obj = Goods() result = obj.price # 自動執行 @property 修飾的 price 方法,並獲取方法的返回值 2,新式類 # ############### 定義 ############### class Goods(object): @property def price(self): print '@property' @price.setter def price(self, value): print '@price.setter' @price.deleter def price(self): print '@price.deleter' # ############### 調用 ############### obj = Goods() obj.price # 自動執行 @property 修飾的 price 方法,並獲取方法的返回值 obj.price = 123 # 自動執行 @price.setter 修飾的 price 方法,並將 123 賦值給方法的參數 del obj.price # 自動執行 @price.deleter 修飾的 price 方法
新式類的集中訪問方法 lass Goods(object): def __init__(self): # 原價 self.original_price = 100 # 折扣 self.discount = 0.8 @property def price(self): # 實際價格 = 原價 * 折扣 new_price = self.original_price * self.discount return new_price @price.setter def price(self, value): self.original_price = value @price.deltter def price(self, value): del self.original_price obj = Goods() obj.price # 獲取商品價格 obj.price = 200 # 修改商品原價 del obj.price # 刪除商品原價