python中的靜態(tài)函數(shù) python靜態(tài)屬性和靜態(tài)方法

python 里面有靜態(tài)函數(shù)嗎

python的類里用@staticmethod的是靜態(tài)方法,@classmethod的是類方法,如下

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、江蘇網(wǎng)絡(luò)推廣、成都小程序開(kāi)發(fā)、江蘇網(wǎng)絡(luò)營(yíng)銷、江蘇企業(yè)策劃、江蘇品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供江蘇建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn

class?Person(object):

person_list?=?[]

def?__init__(self,?name,?age):

self.name?=?name

self.age?=?age

self.person_list.append(self)

@classmethod

def?one_year_later(cls):

for?p?in?cls.person_list:

p.age?+=?1

@staticmethod

def?born_one_boby(name):

return?Person(name,?0)

def?__repr__(self):

return?'Person?name:%s,?age:%s'?%?(self.name,?self.age)

if?__name__?==?'__main__':

petter?=??Person('Petter',23)

merry?=?Person('Merry',21)

print(petter)?#?Person?name:Petter,?age:23

print(merry)??#??Person?name:Merry,?age:21

Person.one_year_later()

print(petter)??#??Person?name:Petter,?age:24

print(merry)??#??Person?name:Merry,?age:22

baby?=?merry.born_one_boby('Tom')

print(Person.person_list)?#??[Person?name:Petter,?age:24,?Person?name:Merry,?age:22,?Person?name:Tom,?age:0]

Python中靜態(tài)方法和類方法的區(qū)別

一、先是在語(yǔ)法上面的區(qū)別:

1、靜態(tài)方法不需要傳入self參數(shù),類成員方法需要傳入代表本類的cls參數(shù);

2、靜態(tài)方法是無(wú)妨訪問(wèn)實(shí)例變量和類變量的,類成員方法無(wú)法訪問(wèn)實(shí)例變量但是可以訪問(wèn)類變量

二、使用的區(qū)別:

由于靜態(tài)方法無(wú)法訪問(wèn)類屬性,實(shí)例屬性,相當(dāng)于一個(gè)相對(duì)獨(dú)立的方法,跟類其實(shí)并沒(méi)有什么關(guān)系。這樣說(shuō)來(lái),靜態(tài)方法就是在類的作用域里的函數(shù)而已。

python 為什么要使用靜態(tài)方法

Python使用靜態(tài)方法類似函數(shù)工具使用,一般盡量少用靜態(tài)方法。

Python的靜態(tài)方法和類成員方法都可以被類或?qū)嵗L問(wèn),兩者概念不容易理清,但還是有區(qū)別的:

1)靜態(tài)方法無(wú)需傳入self參數(shù),類成員方法需傳入代表本類的cls參數(shù);

2)從第1條,靜態(tài)方法是無(wú)法訪問(wèn)實(shí)例變量的,而類成員方法也同樣無(wú)法訪問(wèn)實(shí)例變量,但可以訪問(wèn)類變量;

3)靜態(tài)方法有點(diǎn)像函數(shù)工具庫(kù)的作用,而類成員方法則更接近類似Java面向?qū)ο蟾拍钪械撵o態(tài)方法。

python里面的靜態(tài)方法是不是不能遞歸?

在類里面定義的函數(shù)就是方法,類方法需要@ classmethod 修飾并且有個(gè)隱藏參數(shù) cls,實(shí)例方法必須有個(gè)參數(shù) self, 靜態(tài)方法必須有 @staticmethod修飾,類和實(shí)例都可以訪問(wèn)靜態(tài)方法,實(shí)例可以訪問(wèn)實(shí)例方法也可以訪問(wèn)類方法

類可以訪問(wèn)類方法也可以訪問(wèn)實(shí)例方法,訪問(wèn)實(shí)例方法必須要帶參數(shù) self, 可以理解為類其實(shí)也是一個(gè)實(shí)例,類訪問(wèn)實(shí)例方法不帶參數(shù)會(huì)報(bào)錯(cuò)的.類本身可以訪問(wèn)函數(shù),實(shí)例卻不行.

python 函數(shù)中怎么實(shí)現(xiàn)static 變量

Python使用函數(shù)默認(rèn)值實(shí)現(xiàn)函數(shù)靜態(tài)變量的方法,具體方法如下:

一、Python函數(shù)默認(rèn)值

Python函數(shù)默認(rèn)值的使用可以在函數(shù)調(diào)用時(shí)寫代碼提供方便,很多時(shí)候我們只要使用默認(rèn)值就可以了。 所以函數(shù)默認(rèn)值在python中用到的很多,尤其是在類中間,類的初始化函數(shù)中一幫都會(huì)用到默認(rèn)值。 使用類時(shí)能夠方便的創(chuàng)建類,而不需要傳遞一堆參數(shù)。

只要在函數(shù)參數(shù)名后面加上 ”=defalut_value”,函數(shù)默認(rèn)值就定義好了。有一個(gè)地方需要注意的是,有默認(rèn)值的參數(shù)必須在函數(shù)參數(shù)列表的最后,不允許將沒(méi)有默認(rèn)值的參數(shù)放在有默認(rèn)值的參數(shù)后,因?yàn)槿绻隳菢佣x的話,解釋器將不知道如何去傳遞參數(shù)。

先來(lái)看一段示例代碼:

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

你調(diào)用上面的函數(shù)時(shí),可以修改重試次數(shù)和輸出的提示語(yǔ)言,如果你比較懶得話,那么什么都不用改。

二、python使用函數(shù)默認(rèn)值來(lái)實(shí)現(xiàn)函數(shù)靜態(tài)變量的功能

Python中是不支持靜態(tài)變量的,但是我們可以通過(guò)函數(shù)的默認(rèn)值來(lái)實(shí)現(xiàn)靜態(tài)變量的功能。

當(dāng)函數(shù)的默認(rèn)值是內(nèi)容是可變的類時(shí),類的內(nèi)容可變,而類的名字沒(méi)變。(相當(dāng)于開(kāi)辟的內(nèi)存區(qū)域沒(méi)有變,而其中內(nèi)容可以變化)。

這是因?yàn)閜ython中函數(shù)的默認(rèn)值只會(huì)被執(zhí)行一次,(和靜態(tài)變量一樣,靜態(tài)變量初始化也是被執(zhí)行一次。)這就是他們的共同點(diǎn)。

再來(lái)看下面的程序片段:

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)

其輸出結(jié)果是:

[1]

[1, 2]

[1, 2, 3]

['x', 4]

[1, 2, 3, 5]

前面的好理解,為什么最后 “print f(5)”的輸出是 “[1, 2, 3, 5]”呢?

這是因?yàn)?“print f(4,['x'])”時(shí),默認(rèn)變量并沒(méi)有被改變,因?yàn)槟J(rèn)變量的初始化只是被執(zhí)行了一次(第一次使用默認(rèn)值調(diào)用),初始化執(zhí)行開(kāi)辟的內(nèi)存區(qū)(我們可以稱之為默認(rèn)變量)沒(méi)有被改變,所以最后的輸出結(jié)果是“[1, 2, 3, 5]”。

分享題目:python中的靜態(tài)函數(shù) python靜態(tài)屬性和靜態(tài)方法
文章網(wǎng)址:http://muchs.cn/article2/dossoic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、搜索引擎優(yōu)化、小程序開(kāi)發(fā)、網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)