python初識面向對象(一)

問題:什麼是對象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     # 刪除商品原價
相關文章
相關標籤/搜索