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 相关文章推荐
Python3通过Luhn算法快速验证信用卡卡号的方法
May 14 Python
Python中list初始化方法示例
Sep 18 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
对python 自定义协议的方法详解
Feb 13 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
python求绝对值的三种方法小结
Dec 04 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
django queryset 去重 .distinct()说明
May 19 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 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
论坛头像随机变换代码
2006/10/09 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
json跨域调用python的方法详解
2017/01/11 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
python中eval与int的区别浅析
2019/08/11 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
python如何运行js语句
2020/09/09 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
python与idea的集成的实现
2020/11/20 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
市场督导岗位职责
2015/04/10 职场文书
社区义诊通知
2015/04/24 职场文书
红高粱观后感
2015/06/10 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers