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标准库os.path包、glob包使用实例
Nov 25 Python
python中实现php的var_dump函数功能
Jan 21 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
Python pymongo模块用法示例
Mar 31 Python
python命令行工具Click快速掌握
Jul 04 Python
通过实例了解python property属性
Nov 01 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
python查询MySQL将数据写入Excel
Oct 29 Python
python搜索算法原理及实例讲解
Nov 18 Python
python里反向传播算法详解
Nov 22 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
起点页面传值js,有空研究学习下
2010/01/25 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
2016/05/05 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python中文字符串截取问题
2015/06/15 Python
python删除列表内容
2015/08/04 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
pandas如何处理缺失值
2019/07/31 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
CSS3实现时间轴效果
2016/07/11 HTML / CSS
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
收银员的岗位职责范本
2014/02/04 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
优秀员工自荐书
2015/03/06 职场文书