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

Python 私有屬性和私有方法應(yīng)用場景分析

 更新時間:2020年06月19日 08:47:54   作者:BlackMonkey  
這篇文章主要介紹了Python 私有屬性和私有方法應(yīng)用場景分析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

類的私有屬性和方法

Python是個開放的語言,默認(rèn)情況下所有的屬性和方法都是公開的 或者叫公有方法,不像C++和 Java中有明確的public,private 關(guān)鍵字來區(qū)分私有公有。

Python默認(rèn)的成員函數(shù)和成員變量都是公開的,類的私有屬性指只有在類的內(nèi)部使用的屬性或方法,表現(xiàn)形式為以“__“ 屬性名或方法名以雙下劃線開頭。

class Test(object):
  __count = 0  # 私有屬性 __count

  def get_count(self):
    return self.__count  # 類的內(nèi)部可以使用私有屬性

  def set_count(self, value):
    if self.__check_value(value):  # 在類的內(nèi)部調(diào)用類的私有方法
      self.__class__.__count = value

  def __check_value(self, value):  # 定義類的私有方法 檢查參數(shù)
    if isinstance(value, int):
      return True

a = Test()
print(a.get_count())
a.set_count(100)
print(a.get_count())
#a.__check_value(10)  # 調(diào)用私有方法會報錯
#print(a.__count)			# 直接訪問私有屬性也會報錯

應(yīng)用場景

對于一些敏感的數(shù)據(jù),我們不希望直接被的函數(shù)調(diào)用,或者不希望草率的直接 object.key = value 來修改,我們可以選擇將屬性聲名為私有的,這樣從外部時無法訪問該屬性的,也就不能修改了,但是依然可以修改屬性字典的方法來修改。

# 當(dāng)然 可以使用 @proprety 
class Person(object):
  __name = 'Monkey'

  def update_name(self, name):
    self.__name = name

  def get_name(self):
    return self.__name

p = Person()
p.update_name('BlackMonkey')
print(p.get_name())  # BlackMonkey
print(p.__name)  # 報錯 AttributeError: 'Person' object has no attribute '__name'

下面在看下python中私有屬性和受保護的屬性的實例代碼

具體代碼如下所示:

class People:
 
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self._protect_var = 10       # 受保護的成員,使用一個下劃線_,它僅僅是提示成員受保護,但可以被更改
    self.__private_var = 10       # 使用雙下劃線__可以定義私有屬性
 
  def sayhi(self):
    print("Hi, my name is {}, and I'm {}".format(self.name, self.age))
 
  def get_var(self):
    print(self.__private_var)
 
  def set_var(self, var):
    self.__private_var = var
 
 
# class instance 類的實例化
 
someone = People(name='Jack', age=20)    # 類的實例化
print(someone._protect_var)         # 10 受保護的成員可以被打印
someone._protect_var = 20          # 受保護的成員可以被修改
print(someone._protect_var)         # 20 可以被修改
 
# print(someone.__private_var)          # 報錯 AttributeError: 'People' object has no attribute '__private_var'
someone.__private_var = 30          # 此處可以被修改,不會報錯(此處表示私有屬性可以被修改,具體原因可以百度)
print(someone.__private_var)         # 可以打印,不會報錯
 
someone.get_var()              # 10 此處可以發(fā)現(xiàn),__private_var在上面被改成30,但此處打印出來卻是10(具體原因可以百度)
someone.set_var(40)
someone.get_var()              # 40 這里通過someone.set_var(40)改成了40
 
print(dir(someone))             # dir()打印出someone這個對象支持的屬性和方法
# ['_People__private_var', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__private_var', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_protect_var', 'age', 'get_var', 'name', 'sayhi', 'set_var']
# 在類的內(nèi)部重命名了 __private_var重命名成_People__private_var
 
someone._People__private_var = 100
someone.get_var()              # 100 通過_People__private_var把__private_var的值改成了100

總結(jié)

到此這篇關(guān)于Python 私有屬性和私有方法應(yīng)用場景分析的文章就介紹到這了,更多相關(guān)python 私有屬性和私有方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 快速排序的四種python實現(xiàn)(推薦)

    快速排序的四種python實現(xiàn)(推薦)

    這篇文章主要介紹了python實現(xiàn)快速排序算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python實現(xiàn)音頻提取的示例詳解

    Python實現(xiàn)音頻提取的示例詳解

    在日常生活中,有好聽的翻唱視頻或音樂視頻可以將其音頻分離保存到網(wǎng)易云或QQ音樂中隨時聽,然而大部分的音頻分離軟件需要下載和安裝,所以本文就來分享一種提取音頻的簡便方法吧
    2023-09-09
  • Python3.5字符串常用操作實例詳解

    Python3.5字符串常用操作實例詳解

    這篇文章主要介紹了Python3.5字符串常用操作,結(jié)合實例形式總結(jié)分析了Python3.5字符串輸入、輸出、格式化、切片以及各種常用操作函數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2019-05-05
  • Python Selenium庫的基本使用教程

    Python Selenium庫的基本使用教程

    這篇文章主要給大家介紹了關(guān)于Python Selenium庫的基本使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python 如何展開嵌套的序列

    Python 如何展開嵌套的序列

    這篇文章主要介紹了Python 如何展開嵌套的序列,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 用python一行代碼得到數(shù)組中某個元素的個數(shù)方法

    用python一行代碼得到數(shù)組中某個元素的個數(shù)方法

    今天小編就為大家分享一篇用python一行代碼得到數(shù)組中某個元素的個數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • numpy.random.shuffle打亂順序函數(shù)的實現(xiàn)

    numpy.random.shuffle打亂順序函數(shù)的實現(xiàn)

    這篇文章主要介紹了numpy.random.shuffle打亂順序函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python 弧度與角度互轉(zhuǎn)實例

    python 弧度與角度互轉(zhuǎn)實例

    這篇文章主要介紹了python 弧度與角度互轉(zhuǎn)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python畫圖高斯分布的示例

    Python畫圖高斯分布的示例

    今天小編就為大家分享一篇Python畫圖高斯分布的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python程序暫停的正常處理方法

    Python程序暫停的正常處理方法

    這篇文章主要介紹了Python程序暫停的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11

最新評論