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插入排序算法实例分析
Jul 03 Python
详解在Python的Django框架中创建模板库的方法
Jul 20 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
Python的argparse库使用详解
Oct 09 Python
python Tkinter的图片刷新实例
Jun 14 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
python中dict使用方法详解
Jul 17 Python
python类的实例化问题解决
Aug 31 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 Python
python基础之函数的定义和调用
Oct 24 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中常见的mongodb查询操作
2013/06/20 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
python登陆asp网站页面的实现代码
2015/01/14 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Python判断两个对象相等的原理
2017/12/12 Python
python实现图片转字符小工具
2019/04/30 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
外贸学院会计专业应届生求职信
2013/11/14 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
总经理助理职责
2014/02/04 职场文书
银行服务感言
2014/03/01 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
协议书范文
2015/01/27 职场文书
接待员岗位职责
2015/02/13 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL