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

[复制链接]
oLjwRgTm 发表于 2017-12-30 20:11:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
类的继承
5 O: `/ K: D) |$ n8 K7 c' G( _- U  J. ]; F# b
之前我们讲过了类的基本用法以及权限,今天学习一下类的继承。. N" s3 e: }* ]' [+ C" M
我们简单定义一个继承:
3 T* N" q+ ?4 q% J0 c! d6 M; A
class Mylei(object):
' L) m8 T7 ^4 g- c4 K! k5 o3 A2 l5 K! }****def firm(object):
; @0 s9 Z- K9 c# n2 [* t0 [********print('六楼俱乐部')
$ Z0 X. c6 X6 qclass family(Mylei):
* [0 M6 ]' L5 C****def dz(self):7 r" Z3 R3 }- H+ W. B( \. h: r
********print('四川成都')
; x/ w+ B9 h) |: k, P* ]1 laddress=family()
5 q" z% I, V/ }+ Q5 y! ~$ Waddress.dz()
5 |% P4 j% \) {address.firm()% k8 D( i1 ?  I, v! X4 f
在这个继承中 类 family继承了类Mylei,也就是说Mylei是family的继承对象,Mylei称为父类,family称为子类,而Mylei的继承对象是object,而object则是所有继承能追溯到的源头。这样就对大概说明白了什么是继承。# ~/ ~5 L& x# |# X6 U) N) F
我们看一下刚才那个程序的效果是什么:/ f+ N# ?8 [0 a& ?( H3 \
$ k1 B0 @( l7 y  ~& j" p
类初体验
! u/ n0 \7 L6 v$ s2 q: [2 R我们可以这样理解,Mylei是父亲,family是儿子,第四行是类的实例化,而第八行是调用family这个类中的dz方法' R- ]* O& r3 f$ H; {

, N7 g* {  M2 V0 C2 {: U3 G第九行怎么能调用父类Mylei中的方法呢,这就是类的特性也是最大的优势,父亲有的一些习性儿子当然有啊!$ K! z/ Q; N: y, K7 W. |
当然了,父亲的所有习性儿子都能拥有的!比如父类的私有方法,子类就不能调用!例如:% n" h5 \# @6 ]7 W0 f; V

& b" k9 F: Y7 d不能调用父类私有方法
2 {- H5 N8 |4 S5 M2 U! S% B+ b看,调用父类私有方法就会报错,父亲脚臭,想必儿子不想继承这个传统吧?2 L1 {  h4 \8 R* ^/ t- Z; T
多重继承
- ^1 V" E+ z- p8 n5 Z8 z; G
/ C; A" Y; z' p' f9 m7 s+ o. _# [
, L# ]* T* L9 ?  A$ P" [
多重继承是拥有多个父类,一个子类可以继承多个父类。换句话说,一个儿子可以拥有多个父亲……4 W" A! F1 F$ h

# t) I( T8 `. D7 i看一个例子就好:: y( A! ?* v4 N. V
class Dad1(object):
) ^2 c! a# G" d' y****def foot(self):/ u6 r5 @3 o5 t8 w2 E5 g, j
********print('脚臭')
, b& T2 h. ]& Q8 r; c  fclass Dad2(object):, D8 w* c$ S) L  S
****def eye(self):8 l$ y$ r4 O0 W. r  B
********print('小眼睛')
% v) H& Q" k* J9 q. |# fclass Son(Dad1,Dad2):0 }4 r" {; p- a0 {& W% L. ?
****def defect(self):
5 Q& x% q: d0 p0 a2 v*******print('脚臭眼睛还小')
4 V& L3 {- ~; c# yrun=Son()
/ r* s3 ]  v+ W2 S. r6 Z: @/ J& drun.defect()
1 _, I. e8 b9 Frun.foot()2 ~; e! [# X$ U& h+ x
run.eye()
/ |  e3 e& V( H9 x: m% @
% ?9 f3 i8 N8 p$ b# m! l
多重继承
0 ^! n3 @9 ]1 Y5 \3 |; @从上面代码发现了多重继承的好处,子类不仅可以继承多个父类而且还可以拥有父类的所有非私有方法。& a" \, _& ^2 s  |9 m+ s
多态
7 g) C' {9 u& C7 A1 {0 l, D# t# f1 i! @# c( Z. Q3 U- x  q8 y
什么是多态呢?多态就是当子类的方法和父类的方法一致时,子类的方法覆盖父类的方法。9 t7 n" o+ }+ r8 r3 k
就比如,年轻的时候爸爸时家里顶梁柱,随着年龄增长,父亲干不动了,儿子长大了,儿子就是家里的顶梁柱了
6 B6 [6 n0 Q! k% _0 ^/ W8 Y5 V, X儿子完全替代了父亲了。
  s6 j( q- J: y- F( f+ [( [还是用栗子说话:
2 X/ k% e8 }1 L8 B3 r
# q8 K" y# N9 [$ X8 ^多态
) g9 j! \; Y# ?1 q当父类和子类拥有同一种方法时,子类中的方法会覆盖父类中的方法。/ b2 J0 E1 P" |$ H3 q5 a9 u9 k/ `
封装
' M9 k! O9 y& a7 c" e; T
* w6 X& I1 J+ o# d1 p. j# j

0 t3 I; u, {$ D# w0 v封装就是将类封闭起来不让别人看到,用的时候直接调用就可以了。3 T$ }5 I8 r2 x; n; k

2 p: w$ D. r, C6 P  n7 |: s7 t我们还是举一个栗子:
5 t2 H, U( n8 Z. a+ t2 r) S
* K1 H; ^5 [8 U$ H5 a0 X2 u/ w未封装$ k, T+ I' c* E0 G' b
未封装的类,实例化传入变量后要调用类,则需要在类外部一个函数,这个函数的作用时起到打印的效果。
  n7 z3 N, |* R. N第八行是调用函数,而给函数传入的参数则是第5行run里面的变量,因此第七行变量是run.name 和run.age9 [& i+ N2 f3 O7 [2 @% l- Q! v
封装类( k1 o- ?9 m5 L" V: f2 l
如果封装就直接把外部调用类的函数放进类里面,使之变成类的一个方法。7 _* R, X* G+ O/ A& o
举个栗子:
: V# [- i  q7 r9 r$ B0 f6 ~6 _+ V# [# x% O& E
封装类
% P4 T( @! n& n. v5 e这样就把各种数据直接封装到类里面了。
' j* @. ]9 _% G6 O( v最后
5 T% G. L  Z0 L' O/ N4 e. n' k; p7 F

! k' y6 _8 B  W; l; i" d/ s# |9 ]0 u/ y$ S# K% y0 O
投个票吧6 j; S& ~! j5 y' D! x+ ^
% p5 D" R7 |; {* T4 C, i( P$ \
这样诙谐幽默通俗易懂的方式能接受吗?
; A# ^: p  k  f+ f' y
4 _% U. x" E) u* H, G<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.|网站地图