本文实例讲述了python面向对象之类的封装操作。分享给大家供大家参考,具体如下:
承接上一节《python面向对象之类和实例》,学了student类的定义及实例化,每个实例都拥有各自的name和score。现在若需要打印一个学生的成绩,可定义函数 print_score()
该函数为类外的函数,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class student( object ): def __init__( self , name, score): self .name = name self .score = score may = student( "may" , 90 ) # 须要提供两个属性 peter = student( "peter" , 85 ) print (may.name, may.score) print (peter.name, peter.score) def print_score(student): # 外部函数print_score(student) # print("%s's score is: %d" %(student.name,student.score)) # 普通 print 写法 print ( "{0}'s score is: {1}" . format (student.name,student.score)) # 建议使用 python 2.7 + .format优化写法 print_score(may) print_score(peter) |
既然student实例本身就拥有这些数据,要访问这些数据,就没有必要从外面的函数去访问,我们可以直接在student类的内部定义访问数据的函数。这样,就把数据给“封装”起来了。
“封装”就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类);封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
而这些封装数据的函数是和student类本身是关联起来的,我们称之为类的方法。那如何定义类的方法呢?
就要用到对象 self 本身,参考上例,把 print_score()
函数写为类的方法(python2.7之后的版本,推荐.format
输出写法):
1
2
3
4
5
6
7
8
|
class student( object ): def __init__( self , name, score): self .name = name self .score = score def print_score( self ): print ( "{self.name}'s score is: {self.score}" . format ( self = self )) # python 2.7 + .format优化写法 may = student( "may" , 90 ) peter = student( "peter" , 85 ) |
定义类的方法:除了第一个参数是self外,其他和普通函数一样。
实例调用方法:只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入;注意,若类的方法仅需要self,不需要其他,调用该方法时,仅需 instance_name.function_name()
这样一来,我们从外部看student类,就只需要知道,创建实例需要给出name和score,而如何打印,都是在student类的内部定义的,这些数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。
封装的另一个好处是可以给student类增加新的方法;这边的方法也可以要求传参,如新增定义compare 函数,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class student( object ): def __init__( self , name, score): self .name = name self .score = score def print_score( self ): print ( "{self.name}'s score is: {self.score}" . format ( self = self )) # python 2.7 + .format优化写法 def compare( self ,s): if self .score>s: print ( "better than %d" % (s)) elif self .score = = s: print ( "equal %d" % (s)) else : print ( "lower than %d" % (s)) may = student( "may" , 90 ) peter = student( "peter" , 85 ) may.print_score() peter.print_score() may.compare( 100 ) may.compare( 90 ) may.compare( 89 ) |
希望本文所述对大家python程序设计有所帮助。
原文链接:https://www.cnblogs.com/feeland/p/4415645.html