1.  
  2. 主页
  3.  / 
  4. Python基础到高级
  5.  / 
  6. 面向对象
  7.  / 
  8. 访问控制

访问控制

类的访问控制

私有变量

在Python中,双下划线开始,非双下划线结尾的,都是私有的,在类的外部是无法访问的

Python中的若是定义了私有的属性,那么就需要通过类中指定的方法来访问,不然访问到的就不是我们想要的结果

当我们使用实例对私有属性进行赋值的时候,其实就是给实例重新创建了一个属性,也证实了Python的一个惯例,赋值及创建

尽管使用door实例给__status赋值了,但是其实在类中的__status是没有变化的,受保护的

私有方法

和私有变量是相同,双下划线开始,非双下划线结尾的方法,也是私有的方法

由此可以得出一个结论,所有双下划线开始,非双下划线结尾的成员都是私有成员

在Python中是没有完全的私有属性的

当定义了私有成员的时候,其实只是修改了属性的名,因此当访问私有属性的时候,就会访问不到

Python将定义私有的属性的时候,将私有属性修改成了,_类名 + 私有属性名称

当创建了私有属性的时候,实例化类后,会在实例中的__dict__方法中追加修改后的私有变量keyword-only数据,因此我们可以从__dict__查看实例的属性

当然,如果想在外部强制的修改私有属性也是可以的

这种方法可以修改私有属性的值,但是既然定义为私有属性了,就不能随意的可以更改,因此除非真的有必要,并且清楚明白的知道使用后会有什么后果,否则不用使用这个黑魔法

有一种使用单下划线 ‘_’ 的属性和方法,是一种惯用法,标记成员为私有成员,但是解释器不做任何处理

property装饰器

property装饰器会把一个仅有self参数的函数,变成一个变量,属性的值,就是方法的返回值

property.setter装饰器可以通过两个方法将一个方法转化为属性对此赋值,但是对于需要装饰的方法也是有要求的:

  • 两个方法必须同名
  • 第二个方法必须接受两个参数self和value,value为所赋的值

给类中的私有属性__number进行判断赋值,number必须是整数,大于0,小于10000

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注