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如何实现MySQL实例初始化详解
Nov 06 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
解析python实现Lasso回归
Sep 11 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
python压包的概念及实例详解
Feb 17 Python
Matplotlib animation模块实现动态图
Feb 25 Python
Python数据结构之队列详解
Mar 21 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
php 删除记录实现代码
2009/03/12 PHP
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
浅析javascript 定时器
2014/12/23 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
Vue精简版风格概述
2018/01/30 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
详解node.js 事件循环
2020/07/22 Javascript
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
建筑管理专业求职信
2014/07/28 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
体育个人工作总结
2015/02/09 职场文书
整改通知书
2015/04/20 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
开国大典观后感
2015/06/04 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
代码复现python目标检测yolo3详解预测
2022/05/06 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技