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

[复制链接]
oLjwRgTm 发表于 2017-12-30 20:11:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
类的继承5 U: M$ P3 k6 V- g, u

& L" \8 p+ X# t! y( l/ j之前我们讲过了类的基本用法以及权限,今天学习一下类的继承。
5 L+ L# ^5 h. e* p我们简单定义一个继承:
  y2 \3 [! `8 D
class Mylei(object):2 O! E& P3 G2 @+ }" h$ D. I
****def firm(object):# X, t' v# Z$ B* Y" p
********print('六楼俱乐部'). T$ v& `' g0 `( |# b4 b& j& U# w
class family(Mylei):
9 ~3 a% f- R7 a3 h% Q' L****def dz(self):! L6 x8 ~& Y; {. ^3 k- ?
********print('四川成都'): @1 {/ ?- m, B" B/ X( Q9 `- S! i$ d
address=family()6 M, X* s: x, n$ w8 u; x. I
address.dz()1 b, W% `) k, K9 B7 {" L
address.firm()7 d7 Z$ Q5 k" E' e
在这个继承中 类 family继承了类Mylei,也就是说Mylei是family的继承对象,Mylei称为父类,family称为子类,而Mylei的继承对象是object,而object则是所有继承能追溯到的源头。这样就对大概说明白了什么是继承。
: V- Y# z, A- J6 Q我们看一下刚才那个程序的效果是什么:. m7 _: ?- a; Y2 i6 ~5 k5 S- _

1 e. ]; B( \- }$ u+ w类初体验3 P; q/ K, x. K2 @2 U# H& k
我们可以这样理解,Mylei是父亲,family是儿子,第四行是类的实例化,而第八行是调用family这个类中的dz方法1 J( E  e; Z0 v" ^/ m' c# V$ I# z4 q
: N  _/ R1 v3 a: R/ X
第九行怎么能调用父类Mylei中的方法呢,这就是类的特性也是最大的优势,父亲有的一些习性儿子当然有啊!: h! ]4 s& {3 G: Q6 c4 w' _
当然了,父亲的所有习性儿子都能拥有的!比如父类的私有方法,子类就不能调用!例如:/ v# z5 r, ^7 y% r
0 ~3 ~% S& \, _8 F
不能调用父类私有方法
: s# [! Y4 E. ]# _& N' w- v& {看,调用父类私有方法就会报错,父亲脚臭,想必儿子不想继承这个传统吧?- y, @& v: y1 _1 a( H9 ?6 ?
多重继承
+ \1 j" n0 U( \6 R/ Y4 N
) W+ M' H* l, q
: @* B8 D, X$ e2 f5 ^
多重继承是拥有多个父类,一个子类可以继承多个父类。换句话说,一个儿子可以拥有多个父亲……
7 k4 R* E& W; `5 P3 t8 l5 I
: I7 _  N( R% D" |/ X+ s看一个例子就好:
$ H( v- E5 ^, Y! k9 k! a8 P2 J. Q% j  R" m
class Dad1(object):5 h7 b  K- Z0 o% l
****def foot(self):
! u6 W' k' w/ y4 L: L" {1 ?9 I********print('脚臭')6 H! z! i/ c% M& N9 C) z. s
class Dad2(object):
& o! g+ l5 f1 o8 f) j& O0 j9 Y****def eye(self):7 f* I1 O+ T& \0 {
********print('小眼睛')# i: X, F6 v/ _% s
class Son(Dad1,Dad2):( O& V$ B, P) \% N6 P
****def defect(self):9 H+ j1 l, \' N( f: }
*******print('脚臭眼睛还小')
6 ^5 B1 U+ p/ F% lrun=Son()3 c/ q+ J9 P1 i: ]
run.defect()
5 Z( W8 Z. u2 lrun.foot()* i: c6 z% m# V. k3 i9 s8 D( ~
run.eye()
* o( M0 Z7 Y: H3 H- K; o

' z5 B! E1 o' g8 a$ `多重继承
6 K% X" e! G% i2 V- Z; e$ W从上面代码发现了多重继承的好处,子类不仅可以继承多个父类而且还可以拥有父类的所有非私有方法。
, R" x; i7 Q: g: Y多态
3 s' Z$ r0 H& B3 ~
) x: x% M' ^+ p1 T5 s什么是多态呢?多态就是当子类的方法和父类的方法一致时,子类的方法覆盖父类的方法。
( I  r. s6 i) a2 T% K就比如,年轻的时候爸爸时家里顶梁柱,随着年龄增长,父亲干不动了,儿子长大了,儿子就是家里的顶梁柱了" k" ?3 @  U& h) b! f
儿子完全替代了父亲了。; W. }" W0 m4 R6 z4 O
还是用栗子说话:
4 a; s* [! C% n1 P
! v) F% n6 S0 H+ ~4 S1 F" M多态
! ~; i) {: C/ L当父类和子类拥有同一种方法时,子类中的方法会覆盖父类中的方法。4 H0 ?0 Y% r; q" D$ \. C6 X
封装/ f/ ]) Z/ f7 w3 R

  _& i1 Y5 u# W! w, n' v9 ~3 g+ \. x. g
封装就是将类封闭起来不让别人看到,用的时候直接调用就可以了。& u$ z; }; f! L* @

  o! p/ T% p# I/ m9 `" W4 n' }我们还是举一个栗子:
+ F* s3 x; n) H% i! N" Q3 _
3 N% Q! K; d* w7 N: G未封装
/ C: h9 P3 o, a1 v0 g未封装的类,实例化传入变量后要调用类,则需要在类外部一个函数,这个函数的作用时起到打印的效果。
: O4 m$ `  z+ d% K% c第八行是调用函数,而给函数传入的参数则是第5行run里面的变量,因此第七行变量是run.name 和run.age; J5 ^; K$ y- v5 Z
封装类# |9 ]1 V! n9 B% L
如果封装就直接把外部调用类的函数放进类里面,使之变成类的一个方法。2 H/ o& C# c9 I! m. o- c7 Y  p
举个栗子:
6 Z1 ]( O2 {# \# r
- i$ Q1 ~, I5 f9 X封装类6 N0 X, y) A0 C( I2 E' c
这样就把各种数据直接封装到类里面了。
( }% N4 C+ e0 U$ ~最后0 l1 e6 w' S0 F
0 q6 J6 u* _" Q5 U

5 t; a# H, N2 |. a% o/ g投个票吧6 y) [/ f+ i9 _6 d: l$ g3 y

' n, {- ^0 H. O7 t这样诙谐幽默通俗易懂的方式能接受吗?  i) F4 \2 b) R* t, f- u7 ?
; V+ D, P, Z) V' A
<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.|网站地图