文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中怎么实现访问控制

2023-06-16 20:48

关注

本篇文章给大家分享的是有关Python中怎么实现访问控制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

属性的种类

通过之前的内容,我们知道,在定义一个类时,类内部可以有属性和方法。我们仍然创建一个学生类Student。

Python中怎么实现访问控制

Student类

定义好一个类后,我们就可以在类的外部通过生成对象来使用对象的实例变量或调用成员方法来操作数据,从而隐藏类内部的代码逻辑。但是,从类Student的定义来看,在类的外部,我们依然可以通过“对象.属性”的方式对属性进行任意修改。

Python中怎么实现访问控制

修改属性

上述代码中,我们在类的外部生成了一个对象student1,通过student1.name的方式将name修改为CCC,student1的name属性就被修改了。然而,在面向对象编程中,我们往往不希望类内部的属性被类外部的代码直接修改和访问,因此,私有变量的概念应运而生了。

私有变量顾名思义是私有的,类的私有变量只允许类内部代码操作。Python中,私有变量就是在属性开头加两个下划线“__”。

Python中怎么实现访问控制

私有变量

可以看到,一旦将属性设置为私有变量,如果我们试图通过“对象.私有变量”来直接访问的话,Python就会报错了。

Python中,类的属性可以分为公有变量和私有变量两种,公有变量允许类的外部代码通过“对象.属性”的方式直接进行修改和获取,而私有变量则不允许外部代码直接访问。其中,私有变量的命名以两个下划线“__”开头。

需要注意的是,Python中变量名类似__xxx__的,也就是以双下划线开头,并以双下划线结尾的变量不属于私有变量,因此,我们不能使用类似__name__这样的变量名作为私有变量。

在开发过程中,我们有时会碰到以一个下划线开头的实例变量名,比如_age。

Python中怎么实现访问控制

单下划线开头的实例变量

从上述代码中我们可以看到,以一个下划线开头的实例变量是可以直接在类的外部代码中通过“对象.属性”的方式进行访问的。但是,Python中有个约定俗成的规定,如果你看到别人的代码中使用了这种以一个下划线开头的实例变量,那么你应该把它当做私有变量,不要直接在外部代码中进行访问。

私有变量的访问

在定义类的时候,如果把属性设置成私有变量,就不能在类的外部代码中直接访问了。上述代码中,如果我们想要修改或获取私有变量__name,我们可以通过给Student类创建成员方法get_name( )和set_name( )来对__name进行获取和修改。

Python中怎么实现访问控制

成员方法set/get

有了get_name( )方法和set_name( )方法后,我们就可以通过对象调用成员方法来对私有变量__name进行访问了。或许看到这里,你会有这样的疑问:通过“对象.属性”的方式也可以对属性进行修改和获取,为什么一定要设置成私有变量呢?除了封装性上的要求外,使用成员方法还可以给修改设置限制。

Python中怎么实现访问控制

设置修改限制

上述代码中,我们将学生的年龄限制在10~40之间。此时,若外部代码试图用一个不在此范围内的年龄进行修改时,就会修改失败。通过成员方法修改私有变量可以对传入的参数进行校验,避免传入无效的参数。

如果你刚刚在设置私有变量__name的时候试过在外部代码中使用“对象.__name = 值”的方式,你会发现Python并没有报错,甚至在赋值后可以使用“print(对象.__name)”获取到__name的值。实际上,你用上述方式操作的__name并不是定义类时的那个私有变量__name,我们看一下以下代码。

Python中怎么实现访问控制

对象绑定实例变量

可以看到,虽然通过“对象.属性”的方式我们修改了一个叫__name的变量,但当我们调用get_name( )方法的时候,私有变量__name的值并没有被修改。这是因为,Python允许对象绑定任意属性,student1.__name操作的__name只是新绑定的一个属性而已,它和定义类时定义的私有变量__name虽然名字相同,却是两个不同的变量。

那么私有变量是不是一定不能从外部访问呢?在Python中,我们之所以不能直接访问私有变量__name,是因为Python解释器对外把__name变量改成了_Student__name。换句话说,其实我们是可以通过“_类名+私有变量名”的方式来直接访问私有变量的。

Python中怎么实现访问控制

私有变量的变向直接访问

虽然我们可以通过这种变相的方式直接访问私有变量,但是在实际开发中,我们基本上是抵制这种写法的,因为不同版本的Python解释器可能会把私有变量改成不同的变量名。

以上就是Python中怎么实现访问控制,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯