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数据类型转换函数总结
Mar 11 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
python 判断一组数据是否符合正态分布
Sep 23 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 Python
Python竟然能剪辑视频
May 25 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 深入理解strtotime函数的使用详解
2013/05/23 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
jquery中常用的SET和GET
2009/01/13 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
心理健康教育制度
2014/01/27 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
网络编辑求职信
2014/04/30 职场文书
道路施工安全责任书
2014/07/24 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
求职推荐信范文
2015/03/27 职场文书
通知的格式范文
2015/04/27 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
公司回复函格式
2015/07/14 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android