Python中私有属性的定义方式

  

Python没有类似于Java的私人关键字,但也可以为类定义私有属性。只需将属性命名变为以__开头,例如__field。

  

示例代码:

        类Vector2D(对象):   def __init__(自我,x, y):   自我。__x浮动(x)=自我。__y=浮动(y)   自我。xx=x   自我。yy=y   def get_x(自我):   回归自我。__x #内部访问   if __name__==癬_main__”:   v=Vector2D (3、4)   打印v.__dict__   打印v。_Vector2D__x v.get_x() #但是可以通过v。_Vector2D__x在外部访问   v。__x #外部访问      

输出:         {“yy”: 4,“xx”: 3,“_Vector2D__x”: 3.0,“_Vector2D__y”: 4.0}   3.0 - 3.0   回溯(最近的电话):   …   v.__x   AttributeError:“Vector2D”对象没有属性“__x”      

<强>从上面的例子可以看出:

  

1。__field被编译器重命名为_className__field

  

2。在类外部不能访问obj。__field,但在类内部可以

  

3。但是,这只能防止无意间的调用,不能防止恶意调用,用流利的Python的话来讲,这是一种安全装置,安全装置,用国语来讲,就是防君子不防xx,因为可以通过obj._className__field在外部访问obj的私有__field。

  

  

如果一个属性是以两个下划线开始就标识这个这个属性是一个私有属性

  
  

自我。__money=1000000

     

如果一个方法是以两个下划线开始也代表已经私有

  

子类继承了父类如果父类的属性私有将不会被子类继承

  

私有属性和私有方法可以在类的里面使用

  

自定义类中如果一个属性进行了私有在类的外面不能调用

  

<>强修改私有属性的值

  

如果需要修改一个对象的属性值,通常有2种方法

  
  

对象名。属性名=数据——比;直接修改

  

对象名。方法名()——比;间接修改

     

私有属性不能直接访问,所以无法通过第一种方式修改,一般的通过第二种方式修改私有属性的值:定义一个可以调用的公有方法,在这个公有方法内访问修改。

        类人(对象):      def __init__(自我):   self.name="小明”   自我。__age=20      #获取私有属性的值   def get_age(自我):   返回self.__age      #设置私有属性的值   def set_age(自我,new_age):   自我。__age=new_age         #定义一个对象   p=人()   #强行获取私有属性   #崇尚一切靠自觉   打印(p._Person__age)   打印(p.name)   #想在类的外面获取对象的属性   ret=p.get_age ()   打印(ret)      #想在类的外面修改对象私有属性的值   p.set_age (30)   print (p.get_age ())   之前      

以上这篇Python中私有属性的定义方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

Python中私有属性的定义方式