python面向对象编程封装的概念

这篇文章主要讲解了“python面向对象编程封装的概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python面向对象编程封装的概念”吧!

创新互联建站云计算的互联网服务提供商,拥有超过13年的服务器租用、IDC机房托管、云服务器、虚拟主机、网站系统开发经验,已先后获得国家工业和信息化部颁发的互联网数据中心业务许可证。专业提供云主机、虚拟主机域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。

封装的定义

封装是面向对象编程的一个重要概念。它是指将类中部分属性和方法加以隐藏与保护,使其只能在类内部使用而不能被外部直接访问。

封装最重要的优点有2条:一是提高了数据安全性、二是提高了代码健壮性。

封装的方法

在类内部定义的变量前加双下划线即表示该变量是私有的,外部不能直接访问。

class User:__private = 'secret'def __print():print(f'不能告诉你{User.__private}')

封装的原理

加了双下划线的变量为啥不能从类的外部调用?请认真观察private和print两个变量:

class User:__private = 'secret'def __print():print(f'不能告诉你{User.__private}')print(User.__dict__)out:{
   
   
   '__module__': '__main__', '_User__private': 'secret', '_User__print': <function User.__print at 0x0000026476656280>, '__dict__': <attribute '__dict__' of 'User' objects>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': None}

类内部定义双下划线开头的变量会被python自动转换成 单下划线类名 双下划线 变量名。在类外部不能定义私有变量,即类外部定义双下划线开头的变量不会被自动转换。所以在类外部直接访问私有变量会报错。在类内部可以直接访问私有变量。

另外知道python封装原理后,在类外部实际上还是可以直接访问私有变量,案例如下:

class User:__private = 'secret'def __print():print(f'不能告诉你{User.__private}')print(User._User__private)User._User__print()out:secret
不能告诉你secret

但是强烈建议不要在类外部直接访问类内部的私有属性,这样做破坏了封装的规则,不利于数据安全性和代码健壮性。

封装的案例

运用封装的有很多,下面举一个小案例:

class User:def __init__(self, name, password):self.name = name
        self.__password = passworddef chgpwd(self):pwd = input('请输入旧密码:')if pwd == self.__password:pwd1 = input('请输入新密码:')pwd2 = input('请再输入一次:')if pwd1 == pwd2 and len(pwd1) >= 6:self.__password = pwd1return Falsereturn Truen1 = User('张三', '123456')while n1.chgpwd():print('密码修改失败,请重试!')

在上述代码中,__password是私有属性,不能直接修改!若要修改必须通过chgwd()方法,在该方法中有验证旧密码和重复新密码的功能,确保修改密码合规。在多人配合的项目中封装是不可或缺的手段。经常用来验证输入的数据值是否合理等等。

感谢各位的阅读,以上就是“python面向对象编程封装的概念”的内容了,经过本文的学习后,相信大家对python面向对象编程封装的概念这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!

网页标题:python面向对象编程封装的概念
文章URL:https://www.cdcxhl.com/article48/jocehp.html

成都网站建设公司_创新互联,为您提供微信小程序网站设计公司云服务器搜索引擎优化网站建设微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设