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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
python创建进程fork用法
Jun 04 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
Jun 13 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
在pycharm中无法import所安装的库解决方案
May 31 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常用字符串处理函数实例分析
2014/11/22 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
js 颜色选择插件
2017/01/23 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
详解python 爬取12306验证码
2019/05/10 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
优秀团员个人总结
2015/02/26 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers