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

[复制链接]
oLjwRgTm 发表于 2017-12-30 20:11:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
类的继承
! Q( z8 f& @3 h- t! l
0 L* V2 H- X1 q  q5 e/ A. i, ^! t之前我们讲过了类的基本用法以及权限,今天学习一下类的继承。: c6 y- J1 _5 E5 }: q+ @+ B7 i
我们简单定义一个继承:/ e1 N8 B( r" L- h7 r! W
class Mylei(object):
. c) D9 W' o# X% ~5 ^****def firm(object):
% [% ]5 i9 N: w0 Q5 N********print('六楼俱乐部')0 x! e8 W2 f" _, y& L  R
class family(Mylei):
" Z( w; `# _9 R& C. e& o# l- I****def dz(self):
5 ~( v, ]" e1 h7 j& j/ l7 W5 B********print('四川成都')
1 f; f1 i' }2 B% {  Z" @6 |9 iaddress=family()8 o+ {3 {$ M( w% v0 J9 X, S) ^
address.dz()1 ?7 n% x. g# V1 X/ ?( b, x; V  c" l
address.firm()
% Q% C7 D- |, c& p' [2 i7 r& Y
在这个继承中 类 family继承了类Mylei,也就是说Mylei是family的继承对象,Mylei称为父类,family称为子类,而Mylei的继承对象是object,而object则是所有继承能追溯到的源头。这样就对大概说明白了什么是继承。! [) f3 Z1 q: o! D
我们看一下刚才那个程序的效果是什么:
0 m  j# a4 `, J1 x, ~, K+ Q6 v& R2 W/ b6 F% v% s
类初体验# i0 X4 f# c: K5 @' C6 |
我们可以这样理解,Mylei是父亲,family是儿子,第四行是类的实例化,而第八行是调用family这个类中的dz方法
6 `& J; K! k3 ]" S" ?: p1 y* d+ ?  H+ M
第九行怎么能调用父类Mylei中的方法呢,这就是类的特性也是最大的优势,父亲有的一些习性儿子当然有啊!) _7 X3 `, p+ F7 K- ~
当然了,父亲的所有习性儿子都能拥有的!比如父类的私有方法,子类就不能调用!例如:$ Z% \- [6 d0 K6 R: l9 h1 i

  F3 r3 B$ Y4 _( K% ^1 q$ d3 U不能调用父类私有方法9 ^% j+ ]) s+ z, r
看,调用父类私有方法就会报错,父亲脚臭,想必儿子不想继承这个传统吧?
7 K8 W& [# g6 [8 A0 ]8 E多重继承
, U- p9 p* u' Z* m/ Y

1 q8 e& `1 P) o( m) f8 ]  `
6 Z' q9 e; U/ {( A* a多重继承是拥有多个父类,一个子类可以继承多个父类。换句话说,一个儿子可以拥有多个父亲……. Q! T! ]# l7 g% g: V
( c' T/ O+ T7 V) m1 e
看一个例子就好:
! J" W; ^: H- K% F# H6 _
class Dad1(object):; j% n+ y2 i  V
****def foot(self):# [) N7 H7 g2 G/ Z- K$ P
********print('脚臭')
" A* u( L; ~: G5 X. Gclass Dad2(object):
$ [3 I$ ~* H" }- j****def eye(self):
0 l3 G! g3 t! i: T- b8 U1 J********print('小眼睛'): O( s) ^$ d1 V3 w8 x
class Son(Dad1,Dad2):% [- N6 A  X4 K0 w' L+ }6 a* n
****def defect(self):( S( }& G; U/ @: o" e
*******print('脚臭眼睛还小')& s7 V4 v, b6 U/ L# D
run=Son()0 b- ^4 D3 W, ~7 l0 Q2 d0 {' d
run.defect()
7 J' M! F4 a0 ?# R5 B" {run.foot()
# c2 @8 R; ~# B- u2 Trun.eye()
+ f# w4 i% y4 _# t2 j- M3 u
, e5 L5 j- H' L* W8 ^7 A
多重继承  g. J2 D: @: @$ G% q) ?# C
从上面代码发现了多重继承的好处,子类不仅可以继承多个父类而且还可以拥有父类的所有非私有方法。
) g% j/ c4 A( s0 N+ ]5 a多态9 F! M# \- R) `, U! [6 w
9 n) ]: w3 |% W+ M% k' ]8 [5 K
什么是多态呢?多态就是当子类的方法和父类的方法一致时,子类的方法覆盖父类的方法。
/ }& z& n1 o0 u! f3 S( y就比如,年轻的时候爸爸时家里顶梁柱,随着年龄增长,父亲干不动了,儿子长大了,儿子就是家里的顶梁柱了
4 z8 I& s8 S, Z( `- u) O9 H8 c儿子完全替代了父亲了。* i; H+ E. z8 `' M+ u
还是用栗子说话:9 J2 U( {/ O% A* k5 r

% ?2 e) s! f! V8 O0 J, C' k多态
4 L5 Z2 ?0 ?+ i# h当父类和子类拥有同一种方法时,子类中的方法会覆盖父类中的方法。9 N% I0 c$ R1 E+ h7 s
封装6 f) v1 [( L! c

( l$ o& R" F1 R) O. g8 t. _# X$ e
封装就是将类封闭起来不让别人看到,用的时候直接调用就可以了。
6 F2 w3 n$ M0 I- n% _+ b, N9 W- f/ I
我们还是举一个栗子:; d9 B0 w! y. h- @9 `

" j) {2 D4 \$ x1 x; q# m未封装
5 R& m7 u/ [" ~$ Y未封装的类,实例化传入变量后要调用类,则需要在类外部一个函数,这个函数的作用时起到打印的效果。
( q. u$ v( G; U4 Z+ u第八行是调用函数,而给函数传入的参数则是第5行run里面的变量,因此第七行变量是run.name 和run.age; n- U# a" s, q! ~
封装类0 j- l4 N2 f! Y+ p/ @, y$ T, t
如果封装就直接把外部调用类的函数放进类里面,使之变成类的一个方法。' [& W0 ]& a' N- e" F4 r) @
举个栗子:
2 L+ I: |* k6 C  A: u5 Q
+ i# q4 u* K% G. g# R封装类7 X2 U' S. z" ?" J
这样就把各种数据直接封装到类里面了。& S/ @0 p8 y' E- h( T
最后
; s8 U7 Q/ y) w. d! ]" f
" A8 G4 T% R9 I0 n

& a" r8 i  F% ]) w1 A7 e# s投个票吧6 a9 A; Z  P( H0 D2 {
, J, w- i6 t6 L7 g" i4 G$ q3 s
这样诙谐幽默通俗易懂的方式能接受吗?
" U) x# e6 c6 n+ H* Y1 F! Q
5 \, q7 C* ]: i  F( z' b7 s<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.|网站地图