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

[复制链接]
oLjwRgTm 发表于 2017-12-30 20:11:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
类的继承, m$ P1 S& |- n4 K! k7 U
4 x+ w& y! r% w" S  o) b( U
之前我们讲过了类的基本用法以及权限,今天学习一下类的继承。
" O/ j% ]& J1 Q0 w+ r我们简单定义一个继承:! o/ |8 @* R' A3 a
class Mylei(object):
5 D. D1 x4 F5 U  _1 i4 R* `( Z****def firm(object):
5 `4 G9 T* y4 \% j********print('六楼俱乐部')
' Y' n3 a6 m+ h1 Y+ wclass family(Mylei):
4 @$ W6 W  p+ A, c  a1 L) Q7 I; i****def dz(self):- f( O* L0 ?$ n) j
********print('四川成都')1 m5 @1 d8 n% i2 j
address=family()
2 P0 `3 d9 x* V% Zaddress.dz()
& f( T  o, e8 t2 c$ T2 u9 ?% H9 Qaddress.firm()8 ~# L  P- L7 j( J) x
在这个继承中 类 family继承了类Mylei,也就是说Mylei是family的继承对象,Mylei称为父类,family称为子类,而Mylei的继承对象是object,而object则是所有继承能追溯到的源头。这样就对大概说明白了什么是继承。
9 T) w0 Z1 V4 ^+ j  j% E# z我们看一下刚才那个程序的效果是什么:
# l5 ]+ {! ]) a
1 {0 e' |- C9 R2 F# J/ R0 L类初体验
' X( t. l9 U- r我们可以这样理解,Mylei是父亲,family是儿子,第四行是类的实例化,而第八行是调用family这个类中的dz方法
# ]  _- E) l& c( \  s& ^  J% ]
  ~' M+ p- K' Q& z; e" s. m! Y第九行怎么能调用父类Mylei中的方法呢,这就是类的特性也是最大的优势,父亲有的一些习性儿子当然有啊!, z. ?% {3 E5 ~
当然了,父亲的所有习性儿子都能拥有的!比如父类的私有方法,子类就不能调用!例如:
/ X/ y2 `. b. Z$ ]% d+ \/ `' o- E' I
不能调用父类私有方法
1 x2 [, o& c, k( l* U9 d& u! c9 N看,调用父类私有方法就会报错,父亲脚臭,想必儿子不想继承这个传统吧?
" o2 g  B' A7 {# U) D) o多重继承
4 J& n0 J/ O) s6 f5 \# W

- S% Q5 f! C+ c$ Y& G' d7 c
. O4 h# }  u/ W. x多重继承是拥有多个父类,一个子类可以继承多个父类。换句话说,一个儿子可以拥有多个父亲……2 B5 w6 b8 }$ X8 X: W

$ ?& n* |$ U/ Y1 z/ C看一个例子就好:# w' R" u7 J' z  N) F5 s5 R
class Dad1(object):
3 N4 G+ `. Y4 `1 E! y. `$ C****def foot(self):, a; Z" \- d2 [
********print('脚臭')
4 x/ q/ ~4 T9 c0 qclass Dad2(object):
$ F2 y; Q% C  T1 v****def eye(self):
! U7 |4 f# Y) b/ t********print('小眼睛')
& P$ W5 A7 [0 H. y& Xclass Son(Dad1,Dad2):) S2 ?$ E& e; C$ I: n
****def defect(self):* b' R/ V$ r; k
*******print('脚臭眼睛还小')
  z# S& D4 C5 b- C( g2 v% X$ frun=Son()9 \/ Z$ t2 B% I' L- e$ w
run.defect()
, O0 k4 s! V7 x7 D, K) trun.foot()
' i$ [; E: v1 z! Z* F: x5 Srun.eye()
- ~- s9 d0 Q4 L1 x- a
/ G, D8 o% J$ a3 @/ R# H4 @4 L* W* E
多重继承
* G$ V6 }+ F2 S从上面代码发现了多重继承的好处,子类不仅可以继承多个父类而且还可以拥有父类的所有非私有方法。9 y- Y, ~" I9 x- {
多态; N7 R9 U$ e# j7 F9 Z

% ?" t- P* F9 {7 t1 y什么是多态呢?多态就是当子类的方法和父类的方法一致时,子类的方法覆盖父类的方法。
2 h# f6 U8 D4 Y! W2 B9 s就比如,年轻的时候爸爸时家里顶梁柱,随着年龄增长,父亲干不动了,儿子长大了,儿子就是家里的顶梁柱了) ]' g/ q7 V% d! P. m
儿子完全替代了父亲了。
$ z, R4 V% V2 }1 u) [还是用栗子说话:
; I' H: K' a0 O% _: v  E& [# @! t$ E& F. @  J
多态! Z3 ^5 `8 R% ~/ ~1 A# `
当父类和子类拥有同一种方法时,子类中的方法会覆盖父类中的方法。5 _, x& p# P- A% G2 A, G
封装- Y: T, _. t+ T5 N
# a  H3 C) E% i

) z; r* {) N4 w封装就是将类封闭起来不让别人看到,用的时候直接调用就可以了。
( @+ W. u1 |" ]/ p6 Y
2 e4 N/ F* Q- X$ o* f9 R' U我们还是举一个栗子:; S9 F& ?2 i- W: C3 b6 V7 X+ m- C* d* W% z' P

4 W: ?3 Z8 ?9 c未封装
3 J7 \! r/ B: ^9 b3 O$ U& |未封装的类,实例化传入变量后要调用类,则需要在类外部一个函数,这个函数的作用时起到打印的效果。
7 M4 S$ P- I" d: D+ G  L& O第八行是调用函数,而给函数传入的参数则是第5行run里面的变量,因此第七行变量是run.name 和run.age
& [" n- y6 \9 Q封装类: F  ^0 a% d+ o( _
如果封装就直接把外部调用类的函数放进类里面,使之变成类的一个方法。
5 r& n  j3 D/ }举个栗子:
3 Z3 o4 ]0 S% e0 \, i" J, `1 f. O+ r- t1 w) J# ^$ t& ^; a) y
封装类. J% T7 p! `6 a) o( ~2 _2 p3 ~
这样就把各种数据直接封装到类里面了。, F9 U' H& e( z4 U+ q  L- B9 S" e8 U
最后/ D! W( [/ G  O2 p0 R& v* x

; a+ w( o0 D6 r% J/ U
6 [' |# Y6 g4 x' M; a投个票吧
& k% f1 g) I8 k; m( C
% {! P/ t" N4 m5 b5 B6 N这样诙谐幽默通俗易懂的方式能接受吗?" ~; A- y/ q0 b. e4 y

9 n4 i8 B* q3 l. l<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.|网站地图