python 類方法和靜態方法的區別

2022-02-20 09:30:30 字數 2664 閱讀 8589

1樓:山東中公優就業

一、先是在語法上面的區別:

1、靜態方法不需要傳入self引數,類成員方法需要傳入代表本類的回cls引數;

2、靜態方法是無答妨訪問例項變數和類變數的,類成員方法無法訪問例項變數但是可以訪問類變數

二、使用的區別:

由於靜態方法無法訪問類屬性,例項屬性,相當於乙個相對獨立的方法,跟類其實並沒有什麼關係。這樣說來,靜態方法就是在類的作用域裡的函式而已。

2樓:小賀

一、先來是在語法上面的區別:

1、靜自態方法

不需要傳bai入self引數,類成員方du法需要zhi傳入代表本類的cls引數dao;

2、靜態方法是無法訪問例項變數和類變數的,類成員方法無法訪問例項變數但是可以訪問類變數

二、使用的區別:

由於靜態方法無法訪問類屬性,例項屬性,相當於乙個相對獨立的方法,跟類其實並沒有什麼關係。這樣說來,靜態方法就是在類的作用域裡的函式而已。

python類方法和靜態方法的區別

靜態方法和非靜態方法的區別是什麼

3樓:問明

一、相同點:

靜態類和非靜態類在c#中定義基本是一樣的,只是靜態類定義需要加上static修飾符而已。

二、生命週期:

靜態方法(static method)與靜態成員變數一樣,屬於類本身,在類裝載的時候被裝載到記憶體(memory),不自動進行銷毀,會一直存在於記憶體中,直到jvm關閉。

非靜態方法(non-static method)又叫例項化方法,屬於例項物件,例項化後才會分配記憶體,必須通過類的例項來引用。不會常駐記憶體,當例項物件被jvm**之後,也跟著消失。

三、效率:

靜態方法的使用效率比非靜態方法的效率高。

按照上面的概念,只要記憶體夠用,都可以使用靜態的。

四、執行緒安全:

靜態方法是共享**段,靜態變數是共享資料段。既然是「共享」就有併發(concurrence)的問題。

靜態方法和例項方法是一樣的,在型別第一次被使用時載入。呼叫的速度基本上沒有差別。

五、靜態成員與非靜態成員比較:

1、靜態成員屬於類所有,非靜態成員屬於類的例項所有。

2、每建立乙個類的例項,都會在記憶體中為非靜態成員新分配一塊儲存;非靜態成員屬於類所有,為各個類的例項所公用,無論類建立了多少例項,類的靜態成員在記憶體中只佔同一塊區域。

六、使用不同:

1、靜態方法屬於類所有,類例項化前即可使用。

2、非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員。

3、因為靜態方法在類例項化前就可以使用,而類中的非靜態變數必須在例項化之後才能分配記憶體,static內部只能出現static變數和其他static方法!而且static方法中還不能使用this....等關鍵字..

因為它是屬於整個類!

4、靜態方法效率上要比例項化高,靜態方法的缺點是不自動進行銷毀,而例項化的則可以做銷毀。

5、靜態方法和靜態變數建立後始終使用同一塊記憶體,而使用例項的方式會建立多個記憶體.

4樓:千鋒教育

靜態方法和非靜態方法的區別總結如下:

1、靜態方法屬於類所有,類例項化前即可使用;

2、非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員;

3、因為靜態方法在類例項化前就可以使用,而類中的非靜態變數必須在例項化之後才能分配記憶體;

4、static內部只能出現static變數和其他static方法!而且static方法中還不能使用this等關鍵字,因為它是屬於整個類;

5、靜態方法效率上要比例項化高,靜態方法的缺點是不自動進行銷毀,而例項化的則可以做銷毀;

6、靜態方法和靜態變數建立後始終使用同一塊記憶體,而使用例項的方式會建立多個記憶體。

主要區別:靜態方法在建立物件前就可以使用了,非靜態方法必須通過new出來的物件呼叫。

如:public class per

public string getname()

}上面這個類中的gettype方法,在沒有new物件前這就可以這樣用:

string type=per.gettype();//type="人類";

而getname方法則不能這樣使用,編譯都不會通過

getname必須這樣:

per p=new per();

string name=p.getname();//name="張三";

當然,gettype方法也可能通過物件呼叫:

string type=p.gettype();//type="人類";

5樓:

靜態方法和非靜態方法的區別,是靜態方法,一般用於觀察。

6樓:愛夏夏

靜態類和非靜態類在c#中定義基本是一樣的,只是靜態類定義需要加上static修飾符而已。

下面總結下它們之間的區別:

1、靜態類只能包含靜態成員,否則會丟擲編譯錯誤;然而非靜態類既可以包含非靜態成員也可以包含靜態成員

2、靜態類是不能例項化,之所以不能例項化,是因為靜態類會導致c#編譯器將該類同時標記為abstract和sealed,並且編譯器不會在型別中

3、生成乙個例項的建構函式,從而導致靜態類不能例項化;非靜態類可以,並且靜態成員的訪問只能通過類來進行訪問,因為靜態成員是屬於類的。

python方法帶self和沒有self的區別

帶self是例項的成員 不帶的本地變數 就是說你出了這個方法就看不到這個變數了 python類中的方法一定要self嗎 python中的類中屬性元素加self.和不加self.的區別 在類中,self只能在函式中使用,表示的是例項屬性,就是每個例項可以設定不值,而不相互影響。如果在類級別使用沒有se...

所謂的動態ip和靜態ip的區別是什麼

靜態ip 在inter 上有千百萬臺主機,為了區分這些主機,人們給每台主機都 分配了乙個專門的位址,稱為ip位址。通過ip位址就可以訪問到每一台主機。動態ip 因為ip位址資源非常短缺,通過 撥號上網或普通寬頻上網使用者一般不具備固定ip位址,而是由isp動態分配暫時的乙個ip位址。1.動態ip上網...

ospf和rip和靜態路由三者的區別?各能實現什麼功能

靜態路由就是必須您手工配置,ip route 無法適應網路拓撲變化,變化一次您就得去改一次,ad 1。ripv1 2 都是小型網路下適用的動態路由,路由器之間開啟rip程序,週期得通告鄰居的路由,保證實時更新拓撲變化。是一種基於傳聞的路由機制,也就是距離向量協議,按條數的大小來選擇路徑。但是由於ri...