靜態方法、類方法、屬性方法
首先寫一小段代碼
想必執行效果大家都知道(David is eating fish.),那我加上@staticmethod試一下。
咦????報錯,我下面明明傳入了"fish"這個參數。。。,大家都能想到是靜態方法起的作用,靜態方法實際上跟類就沒有什麽關系了,把類中的方法變成了靜態方法後它就變成了一個單純的函數,它調用不了類的變量,唯一與類產生關聯的是必須通過類去調用。
如果想要傳類的一些變量或靜態屬性也可以,就需要把實例本身傳到函數裏面去。
二、類方法
執行看效果
不是定義了self.name = name了嗎?怎麽又報錯?加上了類方法怎麽調用不到了?
看一下效果
正常了,但是方法裏調用的是類變量了。由此可見,類方法只能訪問類變量,不能訪問實例變量。
三、屬性方法
先看一下代碼和執行效果
我代碼最後的P.eat()相當於調用類中的eat方法,那報錯說類型是不能調用的,我先把小括號去掉,就相當於調用變量或屬性一樣,試一下吧。
執行成功,不再截圖。總結一下作用:把一個方法變成一個靜態屬性,既然是一個屬性了就不能通過括號再調用了,仔細一看,我們不加括號調用,那怎麽傳參數呢?屬性可以賦值,我們試一下能不能賦值
執行:報錯,不能賦值
其實是能賦值的,但是得通過屬性方法的另外一種賦值形式來解決,還得通過@eat.setter寫一個eat方法
打印:
修改是沒有問題了,再來看一下刪除
以上就是屬性方法的幾種用法,那它在什麽時候用呢?比如我想知道一個航班的當前的狀態,因為我不是航空公司,我知道調用航空公司的接口才能查到航班的狀態,比如去哪兒網想知道航班的狀態,它就得連航空公司的接口去查詢,想要了解到狀態通常需要經歷以下幾步:
1、連接航空公司的API接口
2、對查詢結果進行解析,因為返回的數據可能是任何形式的
3、轉成可視化的結果返回給用戶
看一下例子:
執行結果:
靜態方法、類方法、屬性方法