最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python是如何实现封装的

    正文概述    2020-10-02   173

    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是如何实现封装的

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元