介紹:
今天學習的主要是 面向對象程式設計的初級概念了解。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,如需轉載請自行聯系原作者