Python——面向对象——类的继承、多态、封装

[复制链接]
oLjwRgTm 发表于 2017-12-30 20:11:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
类的继承
* t% ^; |% L% M% n& j' ?8 r
) E0 }, p* i- U* l, a之前我们讲过了类的基本用法以及权限,今天学习一下类的继承。& {. f( ~+ d" C: ^* t
我们简单定义一个继承:
# i  o8 W, I& F( D7 D% W% I
class Mylei(object):; v9 ?1 j  m7 ?& q
****def firm(object):
3 R2 ^1 I+ p8 r* q- t********print('六楼俱乐部')& _4 @2 x+ W1 i+ M
class family(Mylei):1 W9 b$ f) [3 L$ g9 L( W
****def dz(self):
3 |$ V9 |7 r/ @/ E********print('四川成都')8 w' D; G- _  u5 a" Z) v7 p: Z
address=family()
* X7 L% w) V; t! Z' |address.dz()
, T2 k1 ~$ s- W) I' I: }address.firm()
5 z( ^$ c' ?$ N, t  X6 t# F' Z
在这个继承中 类 family继承了类Mylei,也就是说Mylei是family的继承对象,Mylei称为父类,family称为子类,而Mylei的继承对象是object,而object则是所有继承能追溯到的源头。这样就对大概说明白了什么是继承。
! o3 y( K+ ?: w& X" k* i( b" {9 E我们看一下刚才那个程序的效果是什么:
9 ~8 w. q* u; o* _6 m& b. e
$ V( h6 b& F' O* f类初体验  H' }2 V! D2 k$ z- |
我们可以这样理解,Mylei是父亲,family是儿子,第四行是类的实例化,而第八行是调用family这个类中的dz方法1 b, y; h4 V, m1 L; e2 }* m0 b  f; G

4 p6 p7 S' [9 _! M+ k9 j第九行怎么能调用父类Mylei中的方法呢,这就是类的特性也是最大的优势,父亲有的一些习性儿子当然有啊!/ b! b' F; V- \! i/ S0 c# T1 W
当然了,父亲的所有习性儿子都能拥有的!比如父类的私有方法,子类就不能调用!例如:
" p' j0 |8 T' ^' f# [$ A) ^/ {9 Y- u( G
不能调用父类私有方法
, x4 g- ?# v: c, X. m看,调用父类私有方法就会报错,父亲脚臭,想必儿子不想继承这个传统吧?% f. M" Z  z, d: b5 v, v: S
多重继承, }* a2 J/ J7 `" J! R8 H8 V7 O
1 O% y8 j8 J! b, n" x' }
3 W2 Z; _# m' K* L9 t
多重继承是拥有多个父类,一个子类可以继承多个父类。换句话说,一个儿子可以拥有多个父亲……
7 O5 k5 A* s9 {) r* s2 g
# ?1 j6 }8 g) X; ^' o0 ]7 d看一个例子就好:* @* J/ w8 B; x- E/ y. f, f# J3 |
class Dad1(object):2 ?( E  _  ^* d) o7 _, J
****def foot(self):
' [- i3 C" }7 O, k/ W& @********print('脚臭')7 `% j0 E3 d! X" c
class Dad2(object):# z! e* G; P, l: o. {' `: o$ R
****def eye(self):
; [" {1 h0 P( h********print('小眼睛')
' `  u- H. z/ n  u% P. t- |class Son(Dad1,Dad2):
  _* X1 y; v! A) [6 r2 P****def defect(self):
8 S: @& c4 W, ^*******print('脚臭眼睛还小')& e8 X: M$ m& M' y% @1 k& y1 J+ q
run=Son()
, B  A- j; \+ orun.defect()
) A/ _# P$ [" i2 Arun.foot()
1 L6 \0 u  |, F# l! p, a1 \) urun.eye()  W; l) k( N8 L7 `

- K0 W4 C8 @! o" Y1 m0 D' `多重继承
! O+ u3 M1 S& E( d7 l* m, z4 z; {从上面代码发现了多重继承的好处,子类不仅可以继承多个父类而且还可以拥有父类的所有非私有方法。
0 R+ F3 W5 W: a" H+ q多态
: y8 Y0 s3 D# U- @7 Y9 e8 x2 G6 M
. G9 A5 v+ W& `! y/ _什么是多态呢?多态就是当子类的方法和父类的方法一致时,子类的方法覆盖父类的方法。$ ?$ b  A+ }$ I: o! q- @
就比如,年轻的时候爸爸时家里顶梁柱,随着年龄增长,父亲干不动了,儿子长大了,儿子就是家里的顶梁柱了# v2 Y: C; r5 V& a' s, i
儿子完全替代了父亲了。
! X8 ~1 Q2 D" A1 ^. k还是用栗子说话:
, {) ?& p# d' X  Y8 `( v; |
7 R2 |  v2 V; Y2 J) L' [$ g( H: \多态
5 H9 d5 A% ~* D' {( W当父类和子类拥有同一种方法时,子类中的方法会覆盖父类中的方法。% v1 c' l6 G7 e5 W; W/ _# d
封装
, m: ^+ r8 g- @9 W/ h6 F

5 {8 b  _% T8 z( W* S* `* G; j( J+ R
封装就是将类封闭起来不让别人看到,用的时候直接调用就可以了。+ |% A& z6 b8 \  k; n
2 {4 M3 b4 Q$ w% |* t- X* @( C
我们还是举一个栗子:' N8 b! u% k+ F; Y: {3 j' p1 J/ M# |
) a1 m5 F% U% a
未封装
7 I9 l6 x* i1 `9 [& T+ J9 Z未封装的类,实例化传入变量后要调用类,则需要在类外部一个函数,这个函数的作用时起到打印的效果。: e, R. J( y7 \. N$ _2 C/ K3 R) m  z
第八行是调用函数,而给函数传入的参数则是第5行run里面的变量,因此第七行变量是run.name 和run.age3 v6 E  O4 [# x
封装类" Y" V3 _/ L/ C& j  ~
如果封装就直接把外部调用类的函数放进类里面,使之变成类的一个方法。
' P  H4 M8 O- {4 V; V举个栗子:* ], o; i/ m: y4 }

( h0 k; Q/ a" P! N% H4 L: r封装类
+ e0 w6 x1 {+ I% L1 k$ v8 I这样就把各种数据直接封装到类里面了。- U. O. ?& A" i! c
最后
& o8 Q( t. E- M6 f' A4 W

6 n& z2 Q  T. X" A  M3 |2 A, M# i
投个票吧
- ^: d7 @9 l9 |; n6 [; v/ w: f* u* B! `6 O( ?
这样诙谐幽默通俗易懂的方式能接受吗?. {+ @& W9 k, B; D) O% O) h/ F

2 [* A3 S. o! }<div class="mp-vote-box mp-vote-outer" id="mp-vote-5a479fa0fd8b99067e3a1218" data-expire-time="1515161400">    <div class="mp-vote-inner">        <div class="mp-vote-title">是否喜欢这种方式  (单选)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图