欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中私有屬性的定義方式

 更新時間:2020年03月05日 09:07:46   作者:Daniel2333  
這篇文章主要介紹了Python中私有屬性的定義方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Python沒有類似于Java的private關(guān)鍵字, 但也可以為類定義私有屬性. 只需將屬性命名變?yōu)橐訽_開頭, 例如 __field.

示例代碼:

class Vector2D(object):
  def __init__(self, x, y):
    self.__x = float(x)
    self.__y = float(y)
    self.xx = x
    self.yy = y 
  def get_x(self):
    return self.__x # 內(nèi)部訪問
if __name__ == "__main__":
  v = Vector2D(3, 4)
  print v.__dict__
  print 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
Traceback (most recent call last):
...
v.__x
AttributeError: 'Vector2D' object has no attribute '__x'

從上面的例子可以看出:

1. __field被編譯器重命名為_className__field

2. 在class外部不能訪問obj.__field, 但在class內(nèi)部可以

3. 但是, 這只能防止無意間的調(diào)用, 不能防止惡意調(diào)用, 用Fluent Python的話來講, 這是一種safety device, not security device, 用國語來講, 就是防君子不防xx, 因?yàn)榭梢酝ㄟ^obj._className__field在外部訪問obj的私有__field.

補(bǔ)充知識:python中私有屬性和私有方法,修改私有屬性的值

如果一個屬性是以兩個下劃線開始 就標(biāo)識這個這個屬性是一個私有屬性

self.__money = 1000000

如果一個方法是以兩個下劃線開始 也代表已經(jīng)私有

子類繼承了父類 如果父類的屬性私有 將不會被子類繼承

私有屬性和私有方法可以在類的里面使用

自定義類中 如果一個屬性進(jìn)行了私有 在類的外面不能調(diào)用

修改私有屬性的值

如果需要修改一個對象的屬性值,通常有2種方法

對象名.屬性名 = 數(shù)據(jù) ----> 直接修改

對象名.方法名() ----> 間接修改

私有屬性不能直接訪問,所以無法通過第一種方式修改,一般的通過第二種方式修改私有屬性的值:定義一個可以調(diào)用的公有方法,在這個公有方法內(nèi)訪問修改。

class Person(object):
 
  def __init__(self):
    self.name = "小明"
    self.__age = 20
 
  #獲取私有屬性的值
  def get_age(self):
    return self.__age
 
  #設(shè)置私有屬性的值
  def set_age(self, new_age):
    self.__age = new_age
 
 
#定義一個對象
p = Person()
#強(qiáng)行獲取私有屬性
#崇尚一切靠自覺
print(p._Person__age)
print(p.name)
#想在類的外面獲取對象的屬性
ret = p.get_age()
print(ret)
 
#想在類的外面修改對象私有屬性的值
p.set_age(30)
print(p.get_age())

以上這篇Python中私有屬性的定義方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論