Python()- 物件導向

來源:互聯網
上載者:User

標籤:引用   中國   span   問題   攻擊   tty   優點   apache   --   

1.楔子2.面向過程VS物件導向

面向過程: 過程(流水線式思維)
優點:極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊代碼即可。
缺點:流程就是用來解決一個問題,代碼牽一髮而動全身。

應用情境:一旦完成基本很少改變的情境,著名的例子有Linux內核,git,以及Apache HTTP Server等。
--------------
函數式:將某功能代碼封裝到函數中,以後無需重複寫代碼,調用方便
--------------

物件導向: 對象(上帝式思維)

優點是:解決程式的擴充性。
對某一個對象單獨修改,會立刻反映到整個體系中,如對遊戲中一個人物參數的特徵和技能修改都很容易。

缺點:可控性差,無法像面向過程一樣精準的預測問題的處理流程與結果,
物件導向的程式一旦開始就由對象之間的互動解決問題,無法預測最終結果。

應用情境:需求經常變化的軟體,一般需求的變化都集中在使用者層,互連網應用,企業內部軟體,遊戲等
物件導向的程式設計並不是全部。對於一個軟體品質來說,物件導向的程式設計只是用來解決擴充性。
---------------------------

類:具有相同特徵的一類事物(人、狗、老虎)(人類 是一個類, )
對象/執行個體:具體的某一個事物(隔壁阿花、樓下旺財)(人類中,具體到某個人,這個具體的人就是一個具體的執行個體,也是一個對象)
執行個體化:類——>對象的過程
===================

3.初識類和對象

dict #字典類型 是個大類
{‘age‘:18} #具體到某一個字典 就是字典的一個對象
****對象就是已經實實在在 存在的 某一個 具體 的 個體。

在python中,用變數表示特徵,用函數表示技能,因而具有相同特徵和技能的一類事物就是‘類’,對象是則是這一類事物中具體的一個。
==========

 

類的聲明:

class Date: #類名大寫變數=值 #靜態屬性 (資料屬性)def __init__(self): #初始化方法 (給對象添加必要的屬性) (self 就是對象本身)passdef func(self): #動態屬性(self必須加) (函數屬性,方法)(類裡面的函數不叫函數,叫方法)

  


============

類的兩種作用:

1.屬性引用
2.執行個體化

屬性引用:

class Person: #定義一個人類role = ‘person‘ #人的角色屬性都是人 (類屬性:聲明的類 的屬性)def walk(self): #人都可以走路,也就是有一個走路方法print("person is walking...")print(Person.role) #查看人的role屬性 (屬性的擷取: 類.屬性 執行個體.屬性)print(Person.walk) #引用人的走路方法,注意,這裡不是在調用Person.country = ‘中國’ # 增加屬性del Person contry #刪除屬性Person.role = 11 #修改屬性 (role 本來就有,重新賦值)

  

================

執行個體化:
類名+() 就是執行個體化,會自動觸發__init__函數,可以用它來為每個執行個體定製自己的特徵

執行個體化過程:
構造方法:造對象
初始化:給新生對象添加一些屬性

文法:

對象名 = 類名(參數)

p = Person(‘zhou‘) #類名()就等於在執行Person.__init__()
#執行完__init__()就會返回一個對象。這個對象類似一個字典,存著屬於這個人本身的一些屬性和方法。
#你可以偷偷的理解:p = {‘name‘:‘zhou‘,‘walk‘:walk}


查看屬性&調用方法:

  • 對象名.(對象的)屬性名稱
  • 對象名.(類的)方法名()

關於self:

self:在執行個體化時自動將對象/執行個體本身傳給__init__的第一個參數,你也可以給他起個別的名字,但不建議這樣做,(代碼別人看不懂)


類屬性的補充:

一:我們定義的類的屬性到底存到哪裡了?有兩種方式查看

  1. dir(類名):查出的是一個名字列表
  2. 類名.__dict__:查出的是一個字典,key為屬性名稱(函數方法名),value為屬性值(函數方法記憶體位址)(__dict__是字典形式,但是不能修改,只能查看)

二:特殊的類屬性

類名.__name__# 類的名字(字串)類名.__doc__# 類的文檔字串 #功能說明字串類名.__base__# 類的第一個父類(在講繼承時會講)類名.__bases__# 類所有父類構成的元組(在講繼承時會講)類名.__dict__# 類的字典屬性類名.__module__# 類定義所在的模組類名.__class__# 執行個體對應的類(僅新式類中)

 


============================

對象的相關知識:

 

class Person:         # 定義一個人類role = ‘person‘         # 人的角色屬性都是人def __init__(self, name, aggressivity, life_value):self.name = name         # 每一個角色都有自己的暱稱;self.aggressivity = aggressivity     # 每一個角色都有自己的攻擊力;self.life_value = life_value     # 每一個角色都有自己的生命值;def attack(self,dog):                     # 人可以攻擊狗,這裡的狗也是一個對象。                    # 人攻擊狗,那麼狗的生命值就會根據人的攻擊力而下降dog.life_value -= self.aggressivit                            

 


對象是關於類的實際存在的一個例子,即執行個體

對象/執行個體只有一種作用:屬性引用

p = Person(‘zhou‘,10,1000) #傳值,預設傳進__init__函數 (預設調用__init__)print(p.name)print(p.aggressivity)print(p.life_value)# zhou# 10# 1000

 

也可以引用一個方法,因為方法也是一個屬性,只不過是一個類似函數的屬性,我們也管它叫動態屬性。
引用動態屬性並不是執行這個方法,要想調用方法和調用函數是一樣的,都需要在後面加上括弧


固定格式:(定義&調用)

定義:

class 類名:def __init__(self,args1,args2):self.attribute1 = args1         #attribute(對象的屬性)self.attribute2 = args2def func1(self):pass         #method(方法名)def func2(self):pass

 

調用:
對象名 = 類名(Kitty,18)    #對象就是執行個體,代表一個具體的東西 obj.class_name(實參1,實參2...)
            #類名() : 類名+括弧就是執行個體化一個類,相當於調用了__init__方法
            #括弧裡傳參數,參數不需要傳self,其他與init中的形參一一對應
            #結果返回一個對象 (對象的屬性在__init__函數裡面)
對象名.對象的屬性1     #查看對象的屬性,直接用 對象名.屬性名稱 即可 obj.[attribute1]
對象名.方法名()      #調用類中的方法,直接用 對象名.方法名() 即可 obj.method1.()

 

Python()- 物件導向

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.