在麵向對象的Python程序,可以限製訪問方法和變量。這可以防止數據被意外修改,這也稱為封裝。讓我們先從一個例子學習。
私有方法
我們創建一個類 Car 有兩個方法: drive() 和 updateSoftware(). 當創建一個汽車對象,它會調用私有方法 __updateSoftware(). 這個函數不能直接在對象上調用,隻能在類上直接調用。
#!/usr/bin/env python class Car: def __init__(self): self.__updateSoftware() def drive(self): print 'driving' def __updateSoftware(self): print 'updating software' redcar = Car() redcar.drive() #redcar.__updateSoftware() not accesible from object.
這個程序將輸出:
updating software drivin
私有方法__updateSoftware()隻能在類內部調用。它不能從類的外部調用。
私有變量
變量可以是私有的,在很多場合是有用的。對象可以保存您的應用程序的關鍵數據,不希望出現這種情況:數據可從代碼的任何地方可以變更。 一個例子如下:
#!/usr/bin/env python class Car: __maxspeed = 0 __name = "" def __init__(self): self.__maxspeed = 200 self.__name = "Supercar" def drive(self): print 'driving. maxspeed ' + str(self.__maxspeed) redcar = Car() redcar.drive() redcar.__maxspeed = 10 # will not change variable because its private redcar.drive()
如果想改變(設置)一個私有變量的值,使用 setter 方法。這是一個簡單的方法用來設置一個私有變量的值。
#!/usr/bin/env python class Car: __maxspeed = 0 __name = "" def __init__(self): self.__maxspeed = 200 self.__name = "Supercar" def drive(self): print 'driving. maxspeed ' + str(self.__maxspeed) def setMaxSpeed(self,speed): self.__maxspeed = speed redcar = Car() redcar.drive() redcar.setMaxSpeed(320) redcar.drive()
為什麼創建它們?因為有些私有值可能在創建對象的後改變,而其他人可能不需要改變。
總結
總之,在Python有:類型 | 描述 |
---|---|
public 方法 | 從任何地方均可訪問 |
private 方法 | 隻能在它們自己的類。以兩個下劃線 |
public 變量 | 從任何地方可訪問 |
private 變量 | 隻有在定義自己的類或方法訪問。以兩個下劃線 |
其他編程語言都有保護類的方法,但是 Python 冇有。
封裝為您提供了更多的控製連接代碼,它允許一個類來改變其執行不會影響代碼的其他部分。