1. 程式人生 > >day07-01-面向對象進階

day07-01-面向對象進階

方法 廣度 私有屬性 接口 rri 多繼承 -- 單繼承 存在

:屬性(實例變量,類變量,私有屬性__var)

方法(構造方法,析構函數:默認就存在,寫了就是重構了函數)

對象:封裝(把一些功能實現細節不對外暴露)

繼承(代碼重用,單繼承,多繼承:3.x均是廣度優先)新式類class foo(object)

    super(子類名,self).init(name.age.other)

self.other = other

重構父類構造函數,可繼承父類並添加子類新屬性

多態:一個接口,多種實現

靜態方法:(實際上跟類沒神魔關系了,相當於單純的函數,但必須通過類名或實例名調用,類似臺灣和大中華的關系。故實例調用時需要傳入實例對象

)@staticmethod聲明

類方法:@classmethod,只能訪問類變量,不能訪問實例變量

屬性方法:屬性特點賦值,函數方法處理作用。@property,把一個方法變成一個靜態屬性,調用時,d.eat()-->d.eat

對屬性方法賦值,在實例化之前建立一個私有屬性,再建立一個方法,用@eat.setter聲明,接受下面實例對象的傳值,賦給私有變量保存,再在另一個函數輸出類的私有屬性值,刪除屬性方法,需要再寫一個方法用@eat.deleter聲明:

@Property

def eat(self)

print("%s"%(self.__food))

@eat.setter

def eat(self,food):

print("set food",food)

self.__food=food

@eat.deleter

def eat(self)

del self.__food

print("刪除__food")

d=Dog("zlz")

d.eat = "包子"

d.eat

del d.eat

屬性方法案例:

  1. class Flight(object):
  2. def __init__(self, name):
  3. self.flight_name = name
  4. def checking_status(self):
  5. print("checking flight %s status " % self.flight_name)
  6. return 1
  7. @property
  8. def flight_status(self):
  9. status = self.checking_status()
  10. if status == 0:
  11. print("flight got canceled...")
  12. elif status == 1:
  13. print("flight is arrived...")
  14. elif status == 2:
  15. print("flight has departured already...")
  16. else:
  17. print("cannot confirm the flight status...,please check later")
  18. @flight_status.setter # 修改
  19. def flight_status(self, status):
  20. status_dic = {
  21. 0: "canceled",
  22. 1: "arrived",
  23. 2: "departured"
  24. }
  25. print("\033[31;1mHas changed the flight status to \033[0m", status_dic.get(status))
  26. @flight_status.deleter # 刪除
  27. def flight_status(self):
  28. print("status got removed...")
  29. f = Flight("CA980")
  30. f.flight_status
  31. f.flight_status = 2 # 觸發@flight_status.setter
  32. del f.flight_status # 觸發@flight_status.deleter

 

day07-01-面向對象進階