Python 类的封装

python 专栏收录该内容
67 篇文章 1 订阅

类的封装和构造可以让我们更好的组织项目结构。

本章我们来学习类的封装。

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)
展开阅读全文
  • 5
    点赞
  • 1
    评论
  • 24
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p> <span><strong> </strong></span> </p> <p> <strong><span style="color:#337FE5;">【</span><strong><span style="color:#337FE5;">为什么学</span></strong><strong><span style="color:#337FE5;">Python?</span></strong><span style="color:#337FE5;">】</span></strong> </p> <p> Python 是当今非常热门的语言之一,2020年的 TIOBE 编程语言排行榜中 ,Python名列第一,并且其流行度依然处在上升势头。 </p> <p> 借此机会,裴老师联合CSDN推出了本课程,希望能影响更多的人走进Python,踏入编程的大门。 </p> <p> <br /> </p> <p> <strong><span style="color:#337FE5;">【</span><strong><span style="color:#337FE5;">你将收获什么?</span></strong><span style="color:#337FE5;">】</span></strong> </p> <p> · 本课程就是为开发者抓住“新基建”这个历史机遇而设置的。认真地学完了本课程,你就有了一把钥匙,所谓“时势造英雄”,Python语言就是未来成长的垫脚石。 </p> <p> · 从核心基础概念到常见第三方模块,包括数据结构、逻辑运算、常见语句、函数、及第三方模块,丰富的案例帮助学员快速入门Python。 </p> <p> · “授人以鱼”和“授人以渔”并重是本课程的特色。通过在本课程的学习,学员能够以Python语言为载体,掌握研习高级编程语言的一般方法,为后续个人发展奠定基础。  </p> <p> <br /> </p> <p> <span style="color:#337FE5;"><strong>[知识脉络图]</strong></span> </p> <p> <span style="color:#337FE5;"><strong><img src="https://img-bss.csdnimg.cn/202007220623236011.png" alt="" /><br /> </strong></span> </p>
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页

打赏

张小凡vip

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值