面向對象初接觸(下)
阿新 • • 發佈:2017-11-12
tom pytho cor 控制 elf 類型 () int on() 當一個類中的屬性條件不滿足我們的需求時,考慮到為了不破壞封裝,從而對其屬性進行增加的實現,就有了以下幾種方法
猴子補丁
from test01 import Person from test001 import get_score def monkeypatch4Person(): Person.get_score = get_score monkeypatch4Person() if __name__== ‘__main__‘: print(print(Person().get_score))#Person類get_score方法是從數據庫拿數據,但是不方便測試,使用猴子補丁,替換了get_score方法,返回模擬的數據 屬性裝飾器
#把實例的屬性保護起來,不讓外部直接訪問,外部使用getter讀取屬性和setter方法設置屬性 class Person: def __init__(self,name,age=18): self.name = name self.__age = age def age(self): return self.__age def set_age(self,value): self.__age = value 通過age 和set_age方法操作屬性
class Person: def#特別註意:這三個方法同名 #property裝飾器 #後面的函數名就是以後的屬性名,他就是getter,這個一定要有,他提供了可讀性 #setter裝飾器 #與屬性名同名,且接受2個參數,第一個是self,第二個是將要賦值的值,有了它,屬性可寫 #deleter裝飾器 #可以控制是否刪除屬性,少用 #property裝飾器必須在前,setter,deleter裝飾器在後 #property裝飾器能通過簡單的方式,把對方法的操作編程對屬性的訪問,並起到了一定隱藏效果 #也可以如下__init__(self,name,age=18): self.name = name self.__age = age @property def age(self): return self.__age @age.setter def age(self,age): self.__age = age @age.deleter def age(self,age): del self.__age print(‘del‘) tom = Person(‘tom‘)print(tom.age) tom.age = 20 print(tom.age) del tom.age
class Person: def __init__(self,name,age=18): self.name = name self.age = age age = property(lambda self:self.__age) tom =Person(‘tom‘) print(tom.age)對象的銷毀
class Person: def __init__(self,name,age=18): self.name = name self.age = age def __del__(self): print(‘delete {}‘.format(self.name)) tom = Person(‘tom‘) del tompython沒有方法重載 python是動態強類型語言,賦值及定義,所以定義靈活,不需要指定類型 封裝
面向對象的三要素之一
封裝:
將數據和操作組織到類中,即屬性和方法
將數據隱藏起來,給使用者提供操作,使用者通過操作就可以獲取或者修改數據,getter和setter
通過訪問控制,暴露適當的數據給用戶,隱藏該隱藏的,保護成員或私有成員
面向對象初接觸(下)