Ⅰ python的類的靜態成員變數是怎麼定義的
classFoo:
staticVar=0#這個就是靜態變數
如果是靜態方法,可以使用@staticmethod標注。
Ⅱ python 為什麼要使用靜態方法
Python使用靜態方法類似函數工具使用,一般盡量少用靜態方法。
Python的靜態方法和類成員方法都可以被類或實例訪問,兩者概念不容易理清,但還是有區別的:
1)靜態方法無需傳入self參數,類成員方法需傳入代表本類的cls參數;
2)從第1條,靜態方法是無法訪問實例變數的,而類成員方法也同樣無法訪問實例變數,但可以訪問類變數;
3)靜態方法有點像函數工具庫的作用,而類成員方法則更接近類似Java面向對象概念中的靜態方法。
Ⅲ Python中靜態方法和類方法的區別
面相對象程序設計中,類方法和靜態方法是經常用到的兩個術語。
邏輯上講:類方法是只能由類名調用;靜態方法可以由類名或對象名進行調用。
在C++中,靜態方法與類方法邏輯上是等價的,只有一個概念,不會混淆。
而在python中,方法分為三類實例方法、類方法、靜態方法。代碼如下:
class Test(object):
def InstanceFun(self):
print("InstanceFun");
print(self);
@classmethod
def ClassFun(cls):
print("ClassFun");
print(cls);
@staticmethod
def StaticFun():
print("StaticFun");
t = Test();
t.InstanceFun();# 輸出InstanceFun,列印對象內存地址「」
Test.ClassFun(); # 輸出ClassFun,列印類位置
Test.StaticFun(); # 輸出StaticFun
t.StaticFun(); # 輸出StaticFun
t.ClassFun(); # 輸出ClassFun,列印類位置
Test.InstanceFun(); # 錯誤,TypeError: unbound method instanceFun() must be called with Test instance as first argument
Test.InstanceFun(t); # 輸出InstanceFun,列印對象內存地址「」
t.ClassFun(Test); # 錯誤 classFun() takes exactly 1 argument (2 given)
可以看到,在PYTHON中,兩種方法的主要區別在於參數。實例方法隱含的參數為類實例self,而類方法隱含的參數為類本身cls。
靜態方法無隱含參數,主要為了類實例也可以直接調用靜態方法。
所以邏輯上類方法應當只被類調用,實例方法實例調用,靜態方法兩者都能調用。主要區別在於參數傳遞上的區別,實例方法悄悄傳遞的是self引用作為參數,而類方法悄悄傳遞的是cls引用作為參數。
Python實現了一定的靈活性使得類方法和靜態方法,都能夠被實例和類二者調用
Ⅳ python中關於類的問題求解
作業要自己做才能提高水平,只說原理,這個問題,定義長寬高,和計算體積,都不是難點,主要是如何知道實例化數量。
Python的特性是,類的變數,如果是在類裡面直接申明,那麼就是靜態變數,這個類的所有對象都共享共一個變數,用類名來訪問。在這個問題中可以用來計數,例如:
classBox:
count=0
def__init__(self,l,w,h):
Box.count+=1
count變數用來統計對象個數,在類的初始化函數__init__中加1,每初始化一個對象就能使統計值加1了。
而在類的函數中申明的self的變數,就是類的成員變數,每個實例化的對象都有一份自己的拷貝,例如
classBox:
count=0
def__init__(self,l,w,h):
Box.count+=1
self.length=l
self.width=w
self.height=h
self.volumn=l*w*h
self.length就是長度,其他的類推,比如要測試並列印出屬性
b1=Box()
b1.length
b1.width
b1.height
b1.volumn
我發覺我基本都把這題做完了。。。。