Python面向对象之类的封装操作示例


Posted in Python onJune 08, 2019

本文实例讲述了Python面向对象之类的封装操作。分享给大家供大家参考,具体如下:

承接上一节《Python面向对象之类和实例》,学了Student类的定义及实例化,每个实例都拥有各自的name和score。现在若需要打印一个学生的成绩,可定义函数 print_score()

该函数为类外的函数,如下:

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 输出写法):

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中的URLError异常的方法
Apr 30 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
Python中的Descriptor描述符学习教程
Jun 02 Python
python爬虫之xpath的基本使用详解
Apr 18 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
Python列表与元组的异同详解
Jul 02 Python
python用for循环求和的方法总结
Jul 08 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Python 生成短8位唯一id实战教程
Jan 13 Python
Python创建自己的加密货币的示例
Mar 01 Python
Python面向对象之类和实例用法分析
Jun 08 #Python
Python学习笔记之自定义函数用法详解
Jun 08 #Python
Python3基础教程之递归函数简单示例
Jun 07 #Python
Python正则表达式匹配和提取IP地址
Jun 06 #Python
Python 常用模块 re 使用方法详解
Jun 06 #Python
Python比较配置文件的方法实例详解
Jun 06 #Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 #Python
You might like
PHP教程 基本语法
2009/10/23 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
7个Javascript地图脚本整理
2009/10/20 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
python之信息加密题目详解
2019/06/26 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
高中生学习生活的自我评价
2013/10/09 职场文书
教师的实习鉴定
2013/12/15 职场文书
村抢险救灾方案
2014/05/09 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
中职生自荐信范文
2014/06/15 职场文书
环保项目建议书
2014/08/26 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis
浅谈Python中的正则表达式
2021/06/28 Python