天天看點

Python--day6--面向對象學習

介紹:

今天學習的主要是 面向對象程式設計的初級概念了解。2016年12月28日 

目錄:

面向對象程式設計介紹

封裝

繼承

多态

objcet-oriented  Programming  ---OOP  

Class 類

一個類即是對一類擁有相同屬性的對象的抽象、藍圖、原型。在類中定義了這些對象的都具備的屬性(variables(data))、共同的方法

Object 對象 

一個對象即是一個類的執行個體化後執行個體,一個類必須經過執行個體化後方可在程式中調用,一個類可以執行個體化多個對象,每個對象亦可以有不同的屬性,就像人類是指所有人,每個人是指具體的對象,人與人之前有共性,亦有不同

Encapsulation 封裝

在類中對資料的指派、内部調用對外部使用者是透明的,這使類變成了一個膠囊或容器,裡面包含着類的資料和方法

Inheritance 繼承

一個類可以派生出子類,在這個父類裡定義的屬性、方法自動被子類繼承

Polymorphism 多态

多态是面向對象的重要特性,簡單點說:“一個接口,多種實作”,指一個基類中派生出了不同的子類,且每個子類在繼承了同樣的方法名的同時又對父類的方法做了不同的實作,這就是同一種事物表現出的多種形态。

1

2

3

4

5

6

7

<code>class</code> <code>Role(</code><code>object</code><code>): </code><code>#定義一個類, class是定義類的文法,Role是類名,(object)是新式類的寫法,必須這樣寫,以後再講為什麼</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>,name,role,weapon,life_value</code><code>=</code><code>100</code><code>,money</code><code>=</code><code>15000</code><code>): </code><code>#初始化函數,在生成一個角色時要初始化的一些屬性就填寫在這裡</code>

<code>        </code><code>self</code><code>.name </code><code>=</code> <code>name     </code>

<code>        </code><code>self</code><code>.role </code><code>=</code> <code>role</code>

<code>        </code><code>self</code><code>.weapon </code><code>=</code> <code>weapon</code>

<code>        </code><code>self</code><code>.life_value </code><code>=</code> <code>life_value</code>

<code>        </code><code>self</code><code>.money </code><code>=</code> <code>money</code>

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<code>class</code>  <code>Role(</code><code>object</code><code>):</code>

<code>    </code><code>members </code><code>=</code> <code>0</code>   <code>##人員初始化      類變量,類屬性</code>

<code>    </code><code>ac </code><code>=</code> <code>None</code>  <code>##類公共的</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>,name,role,weapon,life_value):   </code><code>##形式參數,初始化方法</code>

<code>        </code><code>self</code><code>.name</code><code>=</code><code>name                    </code><code>### 執行個體變量,  self自己的</code>

<code>        </code><code>self</code><code>.role</code><code>=</code><code>role</code>

<code>        </code><code>self</code><code>.weapon</code><code>=</code><code>weapon</code>

<code>        </code><code>self</code><code>.life_value</code><code>=</code><code>life_value</code>

<code>        </code><code>Role.members </code><code>+</code><code>=</code><code>1</code>   <code>##執行個體一次 加1</code>

<code>    </code><code>def</code>  <code>buy_weapon(</code><code>self</code><code>,weapon):    </code><code>##方法</code>

<code>        </code><code>print</code><code>(</code><code>"{}   is buying  {}"</code><code>.</code><code>format</code><code>(</code><code>self</code><code>.name,weapon))</code>

<code>##role的執行個體 ,把一個抽象的類變成一個具體的對象的過程 叫做  執行個體化</code>

<code>p1</code><code>=</code><code>Role(</code><code>"hequan"</code><code>,</code><code>"police"</code><code>,</code><code>"B10"</code><code>,</code><code>90</code><code>)</code>

<code>t1</code><code>=</code><code>Role(</code><code>"he1"</code><code>,</code><code>"Terrorist"</code><code>,</code><code>"B11"</code><code>,</code><code>100</code><code>)</code>

<code>t2</code><code>=</code><code>Role(</code><code>"he2"</code><code>,</code><code>"Terrorist"</code><code>,</code><code>"B12"</code><code>,</code><code>100</code><code>)</code>

<code>t3</code><code>=</code><code>Role(</code><code>"he2"</code><code>,</code><code>"Terrorist"</code><code>,</code><code>"B13"</code><code>,</code><code>100</code><code>)</code>

<code>p1.buy_weapon(</code><code>"AK47"</code><code>)</code>

<code>t1.buy_weapon(</code><code>"AK48"</code><code>)</code>

<code>p1.ac</code><code>=</code><code>"china"</code>  <code>##指派,建立了一個變量 p1.ac=china,和 類的ac 沒關系了。</code>

<code>t1.ac</code><code>=</code><code>"us"</code>

<code>Role.ac</code><code>=</code><code>"Janpanses"</code>  <code>##修改類的ac</code>

<code>Role.weapon</code><code>=</code><code>"D99"</code>

<code>print</code><code>(p1.weapon,t1.weapon)</code>

<code>print</code><code>(p1.ac,t1.ac)  </code><code>##擷取的是 p1.ac</code>

<code>print</code><code>(t2.ac,t3.ac)   </code><code>#擷取的是 類的ac</code>

<code>print</code><code>(t2.weapon,t3.weapon)</code>

<code>print</code><code>(Role.members)    </code><code>##總人員</code>

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

<code>class</code> <code>SchoolMember(</code><code>object</code><code>):</code>

<code>    </code><code>member_nums </code><code>=</code> <code>0</code>  <code>##人數初始化</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>,name,age,sex):</code>

<code>        </code><code>self</code><code>.name</code><code>=</code><code>name</code>

<code>        </code><code>self</code><code>.age</code><code>=</code><code>age</code>

<code>        </code><code>self</code><code>.sex</code><code>=</code><code>sex</code>

<code>        </code><code>self</code><code>.enroll()</code>

<code>    </code><code>def</code>  <code>enroll(</code><code>self</code><code>):</code>

<code>        </code><code>print</code><code>(</code><code>"mSchoolMember {}  is  enrolled!"</code><code>.</code><code>format</code><code>(</code><code>self</code><code>.name))</code>

<code>        </code><code>SchoolMember.member_nums </code><code>+</code><code>=</code><code>1</code>

<code>    </code><code>def</code> <code>tell(</code><code>self</code><code>):</code>

<code>        </code><code>print</code><code>(</code><code>"hello  my name is [{}]"</code><code>.</code><code>format</code><code>(</code><code>self</code><code>.name))</code>

<code>class</code> <code>Teacher(SchoolMember):</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>,name,age,sex,course,salary):</code>

<code>        </code><code>super</code><code>(Teacher,</code><code>self</code><code>).__init__(name,age,sex)</code>

<code>        </code><code>self</code><code>.course</code><code>=</code><code>course</code>

<code>        </code><code>self</code><code>.salary</code><code>=</code><code>salary</code>

<code>    </code><code>def</code> <code>teaching(</code><code>self</code><code>):</code>

<code>        </code><code>print</code><code>(</code><code>"Teacher    [{}]  is teaching  {}."</code><code>.</code><code>format</code><code>(</code><code>self</code><code>.name,</code><code>self</code><code>.course))</code>

<code>class</code> <code>Student(SchoolMember):</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>,name,age,sex,course,tuition):</code>

<code>        </code><code>super</code><code>(Student,</code><code>self</code><code>).__init__(name,age,sex)</code>

<code>        </code><code>self</code><code>.tuition</code><code>=</code><code>tuition</code>

<code>    </code><code>def</code>  <code>pay_tution(</code><code>self</code><code>):</code>

<code>        </code><code>print</code><code>(</code><code>"cao,student  [{}]  paying  tution {}"</code><code>.</code><code>format</code><code>(</code><code>self</code><code>.name,</code><code>self</code><code>.tuition))</code>

<code>t1</code><code>=</code><code>Teacher(</code><code>"hequan"</code><code>,</code><code>24</code><code>,</code><code>"F"</code><code>,</code><code>"PY"</code><code>,</code><code>"10000"</code><code>)</code>

<code>t2</code><code>=</code><code>Teacher(</code><code>"he"</code><code>,</code><code>25</code><code>,</code><code>"N/A"</code><code>,</code><code>"PY"</code><code>,</code><code>"10000"</code><code>)</code>

<code>s1</code><code>=</code><code>Student(</code><code>"quan"</code><code>,</code><code>25</code><code>,</code><code>"Female"</code><code>,</code><code>"python"</code><code>,</code><code>15000</code><code>)</code>

<code>s2</code><code>=</code><code>Student(</code><code>"li"</code><code>,</code><code>26</code><code>,</code><code>"Female"</code><code>,</code><code>"python"</code><code>,</code><code>5000</code><code>)</code>

<code>print</code><code>(</code><code>"-------------------人數-----------------------"</code><code>)</code>

<code>print</code><code>(</code><code>"現在注冊了:"</code> <code>,SchoolMember.member_nums ,</code><code>"人"</code><code>)</code>

<code>print</code><code>(</code><code>"-------------------老師-----------------------"</code><code>)</code>

<code>t1.tell()</code>

<code>t1.teaching()</code>

<code>print</code><code>(</code><code>"---------------------學生---------------------"</code><code>)</code>

<code>s2.tell()</code>

<code>s2.pay_tution()</code>

<code>mSchoolMember hequan   </code><code>is</code>  <code>enrolled!</code>

<code>mSchoolMember he   </code><code>is</code>  <code>enrolled!</code>

<code>mSchoolMember quan   </code><code>is</code>  <code>enrolled!</code>

<code>mSchoolMember li   </code><code>is</code>  <code>enrolled!</code>

<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>人數</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>現在注冊了: </code><code>4</code> <code>人</code>

<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>老師</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>hello   my name </code><code>is</code> <code>[hequan]</code>

<code>Teacher    [hequan]  </code><code>is</code> <code>teaching  PY.</code>

<code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>學生</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>hello   my name </code><code>is</code> <code>[li]</code>

<code>cao,student   [li]  paying  tution </code><code>5000</code>

多态性(polymorphisn)是允許你将父對象設定成為和一個或更多的他的子對象相等的技術,指派之後,父對象就可以根據目前指派給它的子對象的特性以不同的方式運作。簡單的說,就是一句話:允許将子類類型的指針指派給父類類型的指針。

那麼,多态的作用是什麼呢?我們知道,封裝可以隐藏實作細節,使得代碼子產品化;繼承可以擴充已存在的代碼子產品(類);它們的目的都是為了——代碼重用。而多态則是為了實作另一個目的——接口重用!多态的作用,就是為了類在繼承和派生的時候,保證使用“家譜”中任一類的執行個體的某一屬性時的正确調用。

<code>class</code> <code>Animal:</code>

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>, name):  </code><code># Constructor of the class</code>

<code>        </code><code>self</code><code>.name </code><code>=</code> <code>name</code>

<code>    </code><code>def</code> <code>talk(</code><code>self</code><code>):  </code><code># Abstract method, defined by convention only</code>

<code>        </code><code>raise</code> <code>NotImplementedError(</code><code>"Subclass must implement abstract method"</code><code>)</code>

<code>class</code> <code>Cat(Animal):</code>

<code>    </code><code>def</code> <code>talk(</code><code>self</code><code>):</code>

<code>        </code><code>return</code> <code>'Meow!'</code>

<code>class</code> <code>Dog(Animal):</code>

<code>        </code><code>return</code> <code>'Woof! Woof!'</code>

<code>def</code> <code>animl_talk(obj):</code>

<code>    </code><code>print</code><code>(obj.talk())</code>

<code>c </code><code>=</code> <code>Cat(</code><code>"qwe"</code><code>)</code>

<code>d </code><code>=</code> <code>Dog(</code><code>"asd"</code><code>)</code>

<code>"""</code>

<code>animals = [Cat('Missy'),</code>

<code>           </code><code>Dog('Lassie')]</code>

<code>for animal in animals:</code>

<code>    </code><code>print(animal.name + ': ' + animal.talk())</code>

<code>animl_talk(c)</code>

<code>animl_talk(d)</code>

<code></code>

本文轉自 295631788 51CTO部落格,原文連結:http://blog.51cto.com/hequan/1886861,如需轉載請自行聯系原作者