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中正则表达式的使用详解
Oct 17 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
Python实现快速计算词频功能示例
Jun 25 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
Python中psutil的介绍与用法
May 02 Python
Mac安装python3的方法步骤
Aug 09 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
Python 使用type来定义类的实现
Nov 19 Python
python绘制动态曲线教程
Feb 24 Python
python实现简单俄罗斯方块
Mar 13 Python
Python基于os.environ从windows获取环境变量
Jun 09 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
咖啡常见的种类
2021/03/03 新手入门
php模拟js函数unescape的函数代码
2012/10/20 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
js创建数组的简单方法
2016/07/27 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
python如何实现一个刷网页小程序
2018/11/27 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
聚美优品广告词改编
2014/03/14 职场文书
放假通知格式
2015/04/14 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
《风筝》教学反思
2016/02/23 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python