天天看點

Python中類的繼承及類的屬性和方法總結

1.類的繼承

類的繼承

    繼承是面向對象的重要特性之一,

    繼承關系繼承是相對兩個類而言的父子關系

    子類繼承了父類的所有公有屬性和方法,

    繼承,實作了代碼重用

使用繼承

    繼承可以重用已經存在的資料和行為,減少代碼的重複編寫,

    Python在類名後使用一對括号來表示繼承關系,括号中的即類為父類

    class Myclass(ParentClass),

    如果父類定義了__init__方法,子類必須顯式調用父類的__init__方法,

    ParentClass.__init__(self,[args...])

    如果子類需要擴充父類的行為,可以添加__init__方法的參數.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<code>#!/usr/bin/env python</code>

<code>#-*- coding:utf-8  -*-</code>

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

<code>    </code><code>color </code><code>=</code> <code>'yellow'</code>

<code>    </code> 

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

<code>    </code><code>self</code><code>.color </code><code>=</code> <code>"black"</code>

<code>    </code><code>print</code> <code>"I am a %s "</code>  <code>%</code> <code>self</code><code>.color</code>

<code>    </code><code>print</code> <code>(</code><code>"I am a thinker"</code><code>)</code>

<code>class</code> <code>Chinese(People):</code>

<code>    </code><code>pass</code>

<code>cn </code><code>=</code> <code>Chinese()</code>

<code>print</code> <code>cn.color</code>

<code>cn.think()</code>

父類中有構造函數:

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

<code>        </code><code>print</code> <code>"Init..."</code>

<code>        </code><code>self</code><code>.dwell </code><code>=</code> <code>'Earth'</code>

<code>        </code><code>print</code> <code>"I am a %s "</code>  <code>%</code> <code>self</code><code>.color</code>

<code>        </code><code>print</code> <code>(</code><code>"I am a thinker"</code><code>)</code>

<code>print</code> <code>cn.dwell</code>

參數大于兩個:

<code>    </code><code>def</code> <code>__init__(</code><code>self</code><code>,c):</code>

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

<code>        </code><code>People.__init__(</code><code>self</code><code>,</code><code>'red'</code><code>)</code>

<code>        </code><code>pass</code>

Super 函數

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

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

<code>            </code><code>print</code> <code>"enter A"</code>

<code>            </code><code>print</code> <code>"leave A"</code>

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

<code>            </code><code>print</code> <code>"enter B"</code>

<code>            </code><code>super</code><code>(B,</code><code>self</code><code>),__init__()</code>

<code>            </code><code>print</code> <code>"leave B"</code>

<code>b </code><code>=</code> <code>B()</code>

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

<code>       </code><code>super</code><code>(Chinese,</code><code>self</code><code>).__init__(</code><code>'red'</code><code>)</code>

<code>       </code><code>pass</code>

17

18

<code>        </code><code>super</code><code>(Chinese,</code><code>self</code><code>).__init__(</code><code>'red'</code><code>)</code>

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

<code>        </code><code>print</code> <code>"I like taking."</code>

<code>cn.talk()</code>

多重繼承

    Python支援多重繼承,第一個類可以繼承多個父類

    文法:

    class class_name(Parent_c1,Parent_c2,...)

    注意:

    當父類中出現多個自定義的__init__的方法時,

    多重繼承,隻執行第一個累的__init_方法,其他不執行。

19

<code>        </code><code>print</code> <code>(</code><code>"My home is %s "</code><code>) </code><code>%</code> <code>self</code><code>.dwell</code>

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

<code>    </code><code>color </code><code>=</code> <code>'red'</code>

<code>        </code><code>self</code><code>.dwell </code><code>=</code> <code>'Martian'</code>

<code>class</code> <code>Chinese(People,Martian):</code>

<code>        </code><code>People.__init__(</code><code>self</code><code>)</code>

20

21

<code>         </code><code>self</code><code>.color </code><code>=</code> <code>'yellow'</code>

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

<code>        </code><code>print</code> <code>"I like talking"</code>

<code>class</code> <code>Chinese(Martian,People):</code>

3.類的屬性總結

        類屬性,也是公有屬性,

        類的私有屬性,

        對象的共有屬性,

        對象的私有屬性,

        内置屬性,

        函數的局部變量,

        全局變量,

<code>#/usr/bin/env python</code>

<code># -*- coding:utf-8 -*-</code>

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

<code>        </code><code>var1 </code><code>=</code> <code>'類屬性,類的公有屬性 var1'</code>

<code>        </code><code>__var2 </code><code>=</code> <code>'類的私有屬性 __var2'</code>

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

<code>            </code><code>self</code><code>.var3 </code><code>=</code> <code>'對象的公有屬性 var3'</code>

<code>            </code><code>self</code><code>.__var4 </code><code>=</code> <code>'對象的私有屬性 __var4'</code>

<code>            </code><code>var5 </code><code>=</code> <code>'函數的局部變量'</code>

<code>mc </code><code>=</code> <code>MyClass()</code>

<code>mc.func1()     </code><code>#調用後才測列印出var3</code>

<code>print</code> <code>mc.var1</code>

<code>print</code> <code>mc._MyClass__var2</code>

<code>print</code> <code>mc.var3</code>

<code>mc1 </code><code>=</code> <code>MyClass()</code>

<code># mc1.func1()    #mc1沒有調用方法</code>

<code>print</code> <code>mc1.var3</code>

    通過類通路:

22

23

24

25

26

27

28

29

30

<code>    </code><code>#/usr/bin/env python</code>

<code>    </code><code># -*- coding:utf-8 -*-</code>

<code>    </code><code># @time   :2018/1/2 21:06</code>

<code>    </code><code># @Author :FengXiaoqing</code>

<code>    </code><code># @file   :__init__.py.py</code>

<code>    </code><code>#</code>

<code>    </code><code>var6 </code><code>=</code> <code>'全局變量 '</code>

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

<code>        </code><code>var1 </code><code>=</code> <code>'類屬性,類的公有屬性 var1'</code>    <code>##定義在方法外</code>

<code>            </code><code>self</code><code>.var3 </code><code>=</code> <code>'對象的公有屬性 var3'</code>      <code>##定義在方法内</code>

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

<code>            </code><code>print</code> <code>self</code><code>.var1</code>

<code>            </code><code>print</code> <code>self</code><code>.__var2</code>

<code>            </code><code>print</code> <code>self</code><code>.var3</code>

<code>            </code><code>print</code> <code>self</code><code>.__var4</code>

<code>            </code><code>print</code> <code>self</code><code>.var6</code>

<code>    </code><code>mc </code><code>=</code> <code>MyClass()</code>

<code>    </code><code>mc.func1()</code>

<code>    </code><code>mc.func2()</code>

<code>    </code><code>print</code> <code>'*'</code><code>*</code><code>50</code>

<code>    </code><code>print</code> <code>mc.__dict__</code>

<code>    </code><code>print</code> <code>MyClass.var1</code>

<code>    </code><code>#print MyClass.__var2    #不測通過類通路</code>

<code>    </code><code>print</code> <code>mc.var3       </code><code>#對象的屬性隻能通過對象來通路</code>

<code>    </code><code>#print MyClass.__var4</code>

<code>    </code><code>print</code> <code>MyClass.__dict__</code>

4.類的方法總結

    公有方法

    私有方法

    類方法

    靜态方法

    内置方法

<code>    </code><code>name </code><code>=</code> <code>'Test'</code>

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

<code>        </code><code>print</code> <code>self</code><code>.name,</code>

<code>        </code><code>print</code> <code>"我是公有方法."</code>

<code>        </code><code>self</code><code>.__func2() </code><code>#func1間接調用了func2的私有方法</code>

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

<code>        </code><code>print</code> <code>"我是私有方法."</code>

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

<code>        </code><code>print</code> <code>"我是類方法."</code>

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

<code>        </code><code>print</code> <code>s.name,</code>

<code>        </code><code>print</code> <code>"我是靜态方法."</code>

<code>mc.func1()</code>

調用類方法:用裝飾器

<code>    </code><code>@</code><code>classmethod</code>

<code>MyClass.classFun()</code>

調用靜态方法:

<code>    </code><code>@</code><code>staticmethod</code>

<code>    </code><code>def</code> <code>staticFun():</code>

<code>        </code><code>print</code> <code>MyClass.name,    </code>

<code>MyClass.staticFun()</code>

調用内置方法:

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

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

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

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

<code>        </code><code>print</code> <code>MyClass.name,</code>

版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任

本文轉自 楓葉雲  51CTO部落格,原文連結:http://blog.51cto.com/fengyunshan911/2060037