
首先形式上的區別,實例方法隱含的參數為類實例self,而類方法隱含的參數為類本身cls。 靜態方法無隱含參數,主要為了類實例也可以直接調用靜態方法。
所以邏輯上,類方法被類調用,實例方法被實例調用,靜態方法兩者都能調用。主要區別在於參數傳遞上的區別,實例方法悄悄傳遞的是self引用作為參數,而類方法悄悄傳遞的是cls引用作為參數。
接下來看用類和實例分別能否調用類屬性

故 實例方法(普通方法)應該由實例調用,類不能調用;

類方法可以由類調用,而且因為傳入了參數cls,故也可以由實例來調用。

靜態方法兩者都能調用
總結成一張表就是:

注意類實例方法調用的結果和靜態方法調用的結果的區別:

實例方法(普通方法)——————————————————————隨着實例屬性的改變而改變
類方法(無論是類調用還是實例調用)———————————————都是類屬性的值,不隨實例屬性的變化而變化
靜態方法————————————————————————————不可以訪問類屬性,故直接輸出傳入方法的值
