day07-01-面向對象進階
類:屬性(實例變量,類變量,私有屬性__var)
方法(構造方法,析構函數:默認就存在,寫了就是重構了函數)
對象:封裝(把一些功能實現細節不對外暴露)
繼承(代碼重用,單繼承,多繼承:3.x均是廣度優先)新式類class foo(object)
super(子類名,self).init(name.age.other)
self.other = other
重構父類構造函數,可繼承父類並添加子類新屬性
多態:一個接口,多種實現
靜態方法:(實際上跟類沒神魔關系了,相當於單純的函數,但必須通過類名或實例名調用,類似臺灣和大中華的關系。故實例調用時需要傳入實例對象
類方法:@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
屬性方法案例:
- class Flight(object):
- def __init__(self, name):
- self.flight_name = name
- def checking_status(self):
- print("checking flight %s status " % self.flight_name)
- return 1
- @property
- def flight_status(self):
- status = self.checking_status()
- if status == 0:
- print("flight got canceled...")
- elif status == 1:
- print("flight is arrived...")
- elif status == 2:
- print("flight has departured already...")
- else:
- print("cannot confirm the flight status...,please check later")
- @flight_status.setter # 修改
- def flight_status(self, status):
- status_dic = {
- 0: "canceled",
- 1: "arrived",
- 2: "departured"
- }
- print("\033[31;1mHas changed the flight status to \033[0m", status_dic.get(status))
- @flight_status.deleter # 刪除
- def flight_status(self):
- print("status got removed...")
- f = Flight("CA980")
- f.flight_status
- f.flight_status = 2 # 觸發@flight_status.setter
- del f.flight_status # 觸發@flight_status.deleter
day07-01-面向對象進階