1. 程式人生 > >面向對象初接觸(下)

面向對象初接觸(下)

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
__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
#特別註意:這三個方法同名 #property裝飾器 #後面的函數名就是以後的屬性名,他就是getter,這個一定要有,他提供了可讀性 #setter裝飾器 #與屬性名同名,且接受2個參數,第一個是self,第二個是將要賦值的值,有了它,屬性可寫 #deleter裝飾器 #可以控制是否刪除屬性,少用 #property裝飾器必須在前,setter,deleter裝飾器在後 #property裝飾器能通過簡單的方式,把對方法的操作編程對屬性的訪問,並起到了一定隱藏效果 #也可以如下
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 tom
python沒有方法重載 python是動態強類型語言,賦值及定義,所以定義靈活,不需要指定類型 封裝
面向對象的三要素之一
封裝:
將數據和操作組織到類中,即屬性和方法
將數據隱藏起來,給使用者提供操作,使用者通過操作就可以獲取或者修改數據,getter和setter
通過訪問控制,暴露適當的數據給用戶,隱藏該隱藏的,保護成員或私有成員

面向對象初接觸(下)