python 類的封裝


封裝:即在設計類時,刻意的將一些屬性和方法隱藏在類的內部,這樣將無法直接以"類對象.屬性名"(或者"類對象.方法名(參數)")的形式調用這些屬性(或方法),而只能用未隱藏的方法間接的操作這些隱藏的屬性和方法。

  1. 封裝機制保證了類內部數據結構的完整性,很好的避免了外部對內部數據的影響,提高了程序的可維護性。
  2. 避免用戶對類中屬性或方法進行不合理的操作。
  3. 提供代碼的復用性。

python類如何進行封裝
不同於其他面向對象的編程語言,python類中的變量和函數不是共有的就是私有的。

  1. public:公有屬性的類變量和類函數,在類的外部、類內部以及子類中,都可以正常訪問
  2. private:私有屬性的類變量和類函數,只有在本類內部使用,類的外部以及子類都無法使用。

但是,python並沒有提供public、private這些修飾符。為了實現類的封裝,python采取了下面的方法:

  1. 默認情況下,python類中的變量和方法都是公有的,它們的名稱前都沒有下划線(_)
  2. 如果類中的變量和函數,其名稱以雙下划線“__”開頭,則該變量或函數為私有的。
  3. 以單下划線“_”開頭的類屬性和類方法約定俗成的被視為私有屬性和私有方法,雖然它們也能通過類對象正常訪問,但是建議不要這樣。
  4. 以雙下划線開頭和結尾的類方法(如__init__())時python內部定義的,自己定義時,不要使用這種格式。
class Person:
    def setname(self, name):
        if len(name) < 3:
            raise ValueError('名稱長度必須大於3!')
        self.__name = name
        
    def getname(self):
        return self.__name
    
    #為name配置setter和getter方法
    name = property(getname, setname)
    
    def setage(self, age):
        if age < 100:
            self.__age = age
        else:
            raise ValueError('年齡必須小於100!')
    
    def getage(self):
        return self.__age
    
    #為age配置getter和setter方法
    age = property(getage, setage)
    
    #定義私有方法
    def __display(self):
        print(self.__name, "今年", self.__age, "歲。")
        
xiaobai = Person()
xiaobai.name = "xiaobai"
xiaobai.age = 20
print(xiaobai.name)
print(xiaobai.age)
xiaobai
20


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM