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