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中最常用的操作列表的几种方法归纳
Apr 24 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
Python正则简单实例分析
Mar 21 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
python如何重载模块实例解析
Jan 25 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
python与js主要区别点总结
Sep 13 Python
python b站视频下载的五种版本
May 27 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 查找字符串常用函数介绍
2012/06/07 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
jQuery 页面 Mask实现代码
2010/01/09 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python中的descriptor描述器简明使用指南
2016/06/02 Python
python 构造三维全零数组的方法
2018/11/12 Python
由面试题加深对Django的认识理解
2019/07/19 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
jupyter 添加不同内核的操作
2021/02/06 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
三年级科学教学反思
2014/01/29 职场文书
媒体宣传策划方案
2014/05/25 职场文书
婚前协议书标准版
2014/10/19 职场文书
2014年学生资助工作总结
2014/12/18 职场文书