python類靜態變數
Python 是雙面向的,既可以面向函數編程,也可以面向對象編程,所謂面向函數就是單獨一個. py 文件,裡面沒有類,全是一些函數,調用的時候導入模塊,通過模塊名.函數名()即可調用,完全不需要類,那麼你可能會問,那要類還有什麼毛用? 類就是用來面向對象編程啦,類可以有自己的屬性,類可以創建很多實例,每個實例可以有不同的屬性,這也就保存了很多私有的數據,總之都有存在的必要.
再來看上面這張圖,在類裡面定義的函數就是方法,類方法需要@ classmethod 修飾並且有個隱藏參數 cls,實例方法必須有個參數 self, 靜態方法必須有 @staticmethod修飾,類和實例都可以訪問靜態方法,實例可以訪問實例方法也可以訪問類方法,類可以訪問類方法也可以訪問實例方法,訪問實例方法必須要帶參數 self, 可以理解為類其實也是一個實例,類訪問實例方法不帶參數會報錯的.類本身可以訪問函數,實例卻不行.
B. python類真的有靜態方法嗎
python的繼承實際上是一個指針或者是引用的鏈表。它是動態語言。面向對象有多態、繼承、封裝幾個主要概念。要形成面向對象還需要分層,抽象,動靜態建模等技能。繼承通常是指類的繼承,派生類從基類里繼承它的屬性與方法。當然也可以重載基類的方法,或者是重寫方法。python里雖然可以重寫方法,不過仍然可以通過super等函數修飾獲得基類方法。基類又稱父類。派生類也稱為子類。屬性就是對象中的變數。方法就是對象中的函數。 類是一種定義。如果類有了實例,就稱為對象。類是對象的靜態結構的描述,是聲明。
C. python的類中有沒有靜態變數
>>>classMyClass(object):
...clsvar='static'
...
>>>c1=MyClass()
>>>c2=MyClass()
>>>printc1.clsvar,c2.clsvar,MyClass.clsvar
staticstaticstatic
>>>c1.clsvar='changed'
>>>printc1.clsvar,c2.clsvar,MyClass.clsvar
changedstaticstatic
>>>MyClass.clsvar='changecommon'
>>>printc1.clsvar,c2.clsvar,MyClass.clsvar
>>>
D. Python中變數本身沒有任何含義他會根據不同的數據表示不同的意義
咨詢記錄 · 回答於2021-12-10
E. 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實現了一定的靈活性使得類方法和靜態方法,都能夠被實例和類二者調用
F. python的類的靜態成員變數是怎麼定義的
classFoo:
staticVar=0#這個就是靜態變數
如果是靜態方法,可以使用@staticmethod標注。
G. 如何在Python中定義靜態變數
Python使用函數默認值實現函數靜態變數的方法,具體方法如下:
一、Python函數默認值
Python函數默認值的使用可以在函數調用時寫代碼提供方便,很多時候我們只要使用默認值就可以了。 所以函數默認值在python中用到的很多,尤其是在類中間,類的初始化函數中一幫都會用到默認值。 使用類時能夠方便的創建類,而不需要傳遞一堆參數。
只要在函數參數名後面加上 」=defalut_value」,函數默認值就定義好了。有一個地方需要注意的是,有默認值的參數必須在函數參數列表的最後,不允許將沒有默認值的參數放在有默認值的參數後,因為如果你那樣定義的話,解釋器將不知道如何去傳遞參數。
先來看一段示例代碼:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = raw_input(prompt)
if ok in ('y', 'ye', 'yes'): return True
if ok in ('n', 'no', 'nop', 'nope'): return False
retries = retries - 1
if retries < 0: raise IOError, 'refusenik user'
print complaint
你調用上面的函數時,可以修改重試次數和輸出的提示語言,如果你比較懶得話,那麼什麼都不用改。
二、python使用函數默認值來實現函數靜態變數的功能
Python中是不支持靜態變數的,但是我們可以通過函數的默認值來實現靜態變數的功能。
當函數的默認值是內容是可變的類時,類的內容可變,而類的名字沒變。(相當於開辟的內存區域沒有變,而其中內容可以變化)。
這是因為python中函數的默認值只會被執行一次,(和靜態變數一樣,靜態變數初始化也是被執行一次。)這就是他們的共同點。
再來看下面的程序片段:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
print f(4,['x'])
print f(5)
其輸出結果是:
[1]
[1, 2]
[1, 2, 3]
['x', 4]
[1, 2, 3, 5]
前面的好理解,為什麼最後 「print f(5)」的輸出是 「[1, 2, 3, 5]」呢?
這是因為 「print f(4,['x'])」時,默認變數並沒有被改變,因為默認變數的初始化只是被執行了一次(第一次使用默認值調用),初始化執行開辟的內存區(我們可以稱之為默認變數)沒有被改變,所以最後的輸出結果是「[1, 2, 3, 5]」。
H. python的類中,如何定義靜態變數和非靜態變數
(1)不能(2)不能