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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
python 读取文件并替换字段的实例
Jul 12 Python
python实现三次样条插值
Dec 17 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
python绘制彩虹图
Dec 16 Python
Python hashlib常见摘要算法详解
Jan 13 Python
Python 文件数据读写的具体实现
Jan 24 Python
python中sort sorted reverse reversed函数的区别说明
May 11 Python
Python进行区间取值案例讲解
Aug 02 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 strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
php生成xml简单实例代码
2009/12/16 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php跨服务器访问方法小结
2015/05/12 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
python快速排序代码实例
2013/11/21 Python
python安装numpy&安装matplotlib& scipy的教程
2017/11/02 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
暑假实习求职信范文
2013/09/22 职场文书
上班早退检讨书
2014/01/09 职场文书
《石榴》教学反思
2014/03/02 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
个人安全生产责任书
2014/07/28 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
《落花生》教学反思
2016/02/16 职场文书
导游词之桂林
2019/08/20 职场文书
导游词之神仙居景区
2019/11/15 职场文书
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫