1. <source id="nejs2"></source>
  2. <video id="nejs2"></video>
    <source id="nejs2"></source>
          1. 首頁 > Python 教程 > Python 面向對象 > Python 公共、受保護、私有成員

            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()方法的另一個重載作為屬性設置器方法?,F在,_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++。*****

            頂部 久久久久99精品成人片毛片_黃色A片三級三級三級无码_日本不卡高清视频v中文字幕_高清欧美视频一区二区
            1. <source id="nejs2"></source>
            2. <video id="nejs2"></video>
              <source id="nejs2"></source>