天天看点

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