1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?python面向对象?>?当前文章

      python面向对象

      面向对象的封装特性-私有属性,私有方法

      2020-05-14 114赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

        实际开发中,对象的某些属性或方法只允许在对象的内部被使用,不希望在类外部被访问到,这就诞生了封装的需求!这样的属性和方法我们叫他私有属性和私有方法!

        封装可以认为是一个保护,防止该类的代码和数据在外部随意访问,要访问的话必须通过严格的接口控制。

        新手可能会奇怪定义类就是让使用的,为何还要封装保护起来?其实封装与否要结合实际业务场景。比如一个类的属性涉及到账户余额信息,那肯定不能随便修改,所以代码层面要提供一套安全的机制。哪些属性和方法会被封装起来完全看业务情形。

        php语言有private修饰符来定义私有属性和方法,python并没有类似的关键字。python中要实现这个效果可以把类的成员命名为以双下画线开头,这样就不能直接访问。

        实际上Python并不能真正限制访问,Python只是偷偷改变以双下画线开头的方法或者属性名,会在这些方法名前添加单下画线和类名,所以python并不是真正的限制外部访问,只是一种语法上的变形

      # -*- coding: utf-8 -*-
      
      
      class User:
          # 类的数据属性是共享的,但是语法上是可以把类的数据属性设置成私有的如__name
          __name = '老王'  # 会变形为_User__name
      
          def __init__(self):
              self.__age = 10  # 变形为self._User__age
      
          def __input_pwd(self,pwd):  # 变形为_User__input_pwd
              if len(pwd) < 6:
                  print("密码太短")
              else:
                  print('密码为',pwd)
      
          # 只有在类内部才可以通过__input_pwd的形式访问到
          def set_pwd(self,pwd):
              self.__input_pwd(pwd)
      
      
      if __name__ == "__main__":
          u1 = User()
          print(User._User__name)
          u1.set_pwd('12345678') 
          # 外部访问
          u1._User__input_pwd('66666666')
      
      
      老王
      密码为 12345678
      密码为 66666666
      
      

        封装需要从两个方面来考虑:

        1.将对象的属性和实现细节隐藏起来,不允许外部直接访问。

        2.把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作。

        封装的优点

        1.良好的封装能够减少耦合。

        2.类内部的结构可以自由修改。

        3.可以对成员变量进行更精确的控制。

        4.隐藏信息,实现细节。

        封装原则

        1.将不需要对外提供的内容都隐藏起来;

        2.把属性都隐藏,提供公共方法对其访问。

      文章评论

      面向对象的封装特性-私有属性,私有方法文章写得不错,值得赞赏
      国产99视频精品免视看6