Python 公共、受保護、私有成員

經典的面向對象語言,如 C++和 Java,通過公共、私有和受保護的關鍵字來控制對類資源的訪問。類的私有成員被拒絕從類外的環境訪問。它們只能在類內處理。

公眾成員

公共成員(通常是在類中聲明的方法)可以從類外部訪問。調用公共方法需要同一個類的對象。私有實例變量和公共方法的這種安排確保了數據封裝的原則。

默認情況下,Python 類中的所有成員都是公共的。任何成員都可以從類環境之外訪問。

Example: Public Attributes

class Student:
    schoolName = 'XYZ School' # class attribute

    def __init__(self, name, age):
        self.name=name # instance attribute
        self.age=age # instance attribute 

您可以訪問Student類的屬性,也可以修改它們的值,如下所示。

Example: Access Public Members

>>> std = Student("Steve", 25)
>>> std.schoolName
'XYZ School'
>>> std.name
'Steve'
>>> std.age = 20
>>> std.age
20 

受保護成員

一個類的受保護成員可以從該類內部訪問,並且也可用於其子類。不允許其他環境訪問它。這使得父類的特定資源能夠被子類繼承。

Python 讓實例變量受保護的慣例是給它添加前綴 _(單下劃線)。 這有效地防止了它被訪問,除非它來自子類。

Example: Protected Attributes

class Student:
    _schoolName = 'XYZ School' # protected class attribute

    def __init__(self, name, age):
        self._name=name  # protected instance attribute
        self._age=age # protected instance attribute 

事實上,這並不妨礙實例變量訪問或修改實例。您仍然可以執行以下操作:

Example: Access Protected Members

>>> std = Student("Swati", 25)
>>> std._name
'Swati'
>>> std._name = 'Dipa'
>>> std._name
'Dipa' 

但是,您可以使用屬性裝飾器定義一個屬性,並使其受到保護,如下所示。

Example: Protected Attributes

class Student:
    def __init__(self,name):
        self._name = name
    @property
    def name(self):
        return self._name
    @name.setter
    def name(self,newname):
        self._name = newname 

上圖,@property decorator 用於將name()方法作為屬性,@name.setter decorator 用於將name()方法的另一個重載作為屬性設置器方法。現在,_name受到保護。

Example: Access Protected Members

>>> std = Student("Swati")
>>> std.name
'Swati'
>>> std.name = 'Dipa'
>>> std.name
'Dipa'
>>> std._name # still accessible 

上圖,我們使用std.name屬性修改_name屬性。但是,它仍然可以在 Python 中訪問。 因此,負責任的程序員不會從類外訪問和修改以_為前綴的實例變量。

私人成員

Python 沒有任何機制可以有效地限制對任何實例變量或方法的訪問。Python 規定了一個慣例,在變量/方法的名稱前加一個或兩個下劃線,以模仿受保護和私有訪問說明符的行為。

變量前面的雙下劃線__使其成為私有的。 強烈建議不要在課外觸碰。任何嘗試都會導致屬性錯誤:

Example: Private Attributes

class Student:
    __schoolName = 'XYZ School' # private class attribute

    def __init__(self, name, age):
        self.__name=name  # private instance attribute
        self.__salary=age # private instance attribute
    def __display(self):  # private method
        print('This is private method.') 

Example:

>>> std = Student("Bill", 25)
>>> std.__schoolName
AttributeError: 'Student' object has no attribute '__schoolName'
>>> std.__name
AttributeError: 'Student' object has no attribute '__name'
>>> std.__display()
AttributeError: 'Student' object has no attribute '__display' 

Python 執行私有變量的名稱管理。每個帶雙下劃線的成員都將被更改為_object._class__variable。因此,它仍然可以從課外訪問,但是應該避免這種做法。

Example:

>>> std = Student("Bill", 25)
>>> std._Student__name
'Bill'
>>> std._Student__name = 'Steve'
>>> std._Student__name
'Steve'
>>> std._Student__display()
'This is private method.' 

因此,Python 提供了公共、受保護和私有訪問修飾符的概念實現,但不像其他語言,如 C# 、Java、C++。*****

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129738.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論