1. 程式人生 > >靜態方法、類方法、屬性方法

靜態方法、類方法、屬性方法

去哪兒 bsp 我不 了解 ati def vpd 解決 editor

一、靜態方法

首先寫一小段代碼

技術分享圖片技術分享圖片

想必執行效果大家都知道(David is eating fish.),那我加上@staticmethod試一下。

技術分享圖片

技術分享圖片

咦????報錯,我下面明明傳入了"fish"這個參數。。。,大家都能想到是靜態方法起的作用,靜態方法實際上跟類就沒有什麽關系了,把類中的方法變成了靜態方法後它就變成了一個單純的函數,它調用不了類的變量,唯一與類產生關聯的是必須通過類去調用。

如果想要傳類的一些變量或靜態屬性也可以,就需要把實例本身傳到函數裏面去。

技術分享圖片


二、類方法

技術分享圖片

執行看效果

技術分享圖片

不是定義了self.name = name了嗎?怎麽又報錯?加上了類方法怎麽調用不到了?

技術分享圖片

看一下效果

技術分享圖片

正常了,但是方法裏調用的是類變量了。由此可見,類方法只能訪問類變量,不能訪問實例變量。


三、屬性方法

先看一下代碼和執行效果

技術分享圖片

技術分享圖片

我代碼最後的P.eat()相當於調用類中的eat方法,那報錯說類型是不能調用的,我先把小括號去掉,就相當於調用變量或屬性一樣,試一下吧。

技術分享圖片

執行成功,不再截圖。總結一下作用:把一個方法變成一個靜態屬性,既然是一個屬性了就不能通過括號再調用了,仔細一看,我們不加括號調用,那怎麽傳參數呢?屬性可以賦值,我們試一下能不能賦值

技術分享圖片

執行:報錯,不能賦值

技術分享圖片

其實是能賦值的,但是得通過屬性方法的另外一種賦值形式來解決,還得通過@eat.setter寫一個eat方法

技術分享圖片

打印:

技術分享圖片


修改是沒有問題了,再來看一下刪除

技術分享圖片

以上就是屬性方法的幾種用法,那它在什麽時候用呢?比如我想知道一個航班的當前的狀態,因為我不是航空公司,我知道調用航空公司的接口才能查到航班的狀態,比如去哪兒網想知道航班的狀態,它就得連航空公司的接口去查詢,想要了解到狀態通常需要經歷以下幾步:

1、連接航空公司的API接口

2、對查詢結果進行解析,因為返回的數據可能是任何形式的

3、轉成可視化的結果返回給用戶

看一下例子:

技術分享圖片

執行結果:

技術分享圖片



靜態方法、類方法、屬性方法