python的class用法 Python中的classmethod和staticmethod有什么具體用途?
Python中的classmethod和staticmethod有什么具體用途?classmethod和staticmethod在不需要實(shí)例化的情況下,能夠讓類(lèi)方法在類(lèi)以外直接調(diào)用。區(qū)別在以下兩個(gè)方面
Python中的classmethod和staticmethod有什么具體用途?
classmethod和staticmethod在不需要實(shí)例化的情況下,能夠讓類(lèi)方法在類(lèi)以外直接調(diào)用。
區(qū)別在以下兩個(gè)方面:
1.classmethod類(lèi)方法,必須把類(lèi)作為第一個(gè)參數(shù),「可以訪(fǎng)問(wèn)類(lèi)變量」,可以通過(guò)實(shí)例名或類(lèi)名訪(fǎng)問(wèn);
2.staticmethod靜態(tài)方法,不強(qiáng)制傳入self或者cls,對(duì)類(lèi)和實(shí)例都一無(wú)所知(相當(dāng)于把類(lèi)方法變成一個(gè)普通的方法,與類(lèi)無(wú)關(guān)),「不能訪(fǎng)問(wèn)類(lèi)變量」,「也不能訪(fǎng)問(wèn)實(shí)例變量」;可以通過(guò)實(shí)例名或類(lèi)名訪(fǎng)問(wèn)。
具體用途為:
1.classmethod類(lèi)方法,依賴(lài)self或者cls傳參,所以必須寫(xiě)在類(lèi)里,與類(lèi)強(qiáng)關(guān)聯(lián),可以在類(lèi)之外,訪(fǎng)問(wèn)類(lèi)變量;
2.staticmethod靜態(tài)方法,完全獨(dú)立于類(lèi),因此不能訪(fǎng)問(wèn)類(lèi)方法。
就那么簡(jiǎn)單,根據(jù)是否需要訪(fǎng)問(wèn)類(lèi)變量,取決于是否需要訪(fǎng)問(wèn)類(lèi)方法。
說(shuō)通俗點(diǎn),就是方便在沒(méi)有實(shí)例化的情況下,直接調(diào)用類(lèi)方法,上述兩個(gè)東西都能實(shí)現(xiàn)該目的。
python類(lèi)里面的class是什么意思?。壳??
python這方面很靈活。其實(shí)java也一樣允許這樣子。你幾乎可以在任何情況下做任何事情。通常classMeta可以放在外面。不過(guò),這樣它就不能直接訪(fǎng)問(wèn)父類(lèi)的一些屬性了。所以在python里class如果放在另一個(gè)class里面,通常并不是為了隱藏這個(gè)class,并不是讓別人看不到它。而因?yàn)樗枰割?lèi)里的一些屬性。需要共享。另外直接在類(lèi)里定義的一些變量,比如queryset,也是屬于類(lèi)全局級(jí)的。只要引用了這個(gè)類(lèi),即使沒(méi)有初始化,這些變量也已經(jīng)實(shí)例化。這個(gè)有些象是java里static的全局定義結(jié)果。我們通常用這個(gè)方法來(lái)在不同的函數(shù)變量間共享一部分?jǐn)?shù)據(jù)。同時(shí)又不需要初始化一個(gè)實(shí)例并用指針指向這一部分?jǐn)?shù)據(jù)。而是通過(guò)類(lèi)名直接引用。比如下面的一個(gè)用法classConfig:passConfig.user_name="xxx"Config.password="yyyy"這樣。只要你在當(dāng)前模塊里,通過(guò)Config就可以引用到user_name和password,而不需要global這個(gè)修飾符。
python class和def的區(qū)別?
class是數(shù)據(jù)類(lèi)型中的類(lèi),它封裝了一些數(shù)據(jù)成員和操作方法,以供類(lèi)或子類(lèi)的實(shí)例使用;
而def是define(定義)的簡(jiǎn)寫(xiě),通常用于聲明接下來(lái)的是一個(gè)定義。