Python面向对象之类的封装操作示例
Python  /  管理员 发布于 7年前   171
本文实例讲述了Python面向对象之类的封装操作。分享给大家供大家参考,具体如下:
承接上一节《Python面向对象之类和实例》,学了Student类的定义及实例化,每个实例都拥有各自的name和score。现在若需要打印一个学生的成绩,可定义函数 print_score()
该函数为类外的函数,如下:
class Student(object): def __init__(self, name, score): self.name = name self.score = scoreMay = 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
输出写法):
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 函数,如下:
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相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号