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的Django框架中的中间件
Jul 24 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
python for循环输入一个矩阵的实例
Nov 14 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
Python数据存储之 h5py详解
Dec 26 Python
关于Tensorflow分布式并行策略
Feb 03 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
python合并多个excel文件的示例
Sep 23 Python
pycharm实现猜数游戏
Dec 07 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
使用python如何删除同一文件夹下相似的图片
May 07 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
PHP数组函数知识汇总
2016/05/12 PHP
浅谈php://filter的妙用
2019/03/05 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
潜说js对象和数组
2011/05/25 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
JavaScript 原型继承
2011/12/26 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
three.js中文文档学习之创建场景
2017/11/20 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
Python3实现从文件中读取指定行的方法
2015/05/22 Python
python win32 简单操作方法
2017/05/25 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
环保倡议书格式范文
2014/05/14 职场文书
党员对照检查材料
2014/09/22 职场文书
期末复习计划
2015/01/19 职场文书
西湖英语导游词
2015/02/06 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript