python 例項方法,類方法 以及靜態方法

2021-09-07 21:04:34 字數 1625 閱讀 8342

對於python的初學者,了解例項方法,類方法 以及靜態方法並不是特別的重要,但是若想更好的利用python作為自己的程式設計工具,則不得不學。在此先說明一下,有人會問python2.7.x以及python3.x先學哪個好,其實我覺得兩者並沒有太多的區別。在許多公司都會沿用python2.7.x,這是歷史原因。雖說官方建議python3,但是不代表python2比python3效能差,而且github上的許多開源專案都會使用python2和python3同時用。

class classa():

def __init__(self):

print("init class")

def method(self):

print("start method")

@classmethod

def class_method(cls):

print("start class method ", cls)

@staticmethod

def static_method():

print("start static method")

def tools(self):

classa.static_method()

if __name__ == '__main__':

## 例項方法

p = classa()

p.method()

## 等同於

classa().method()

## 類方法

c = classa()

c.class_method()

## 等同於

classa.class_method()

## 靜態方法

classa.static_method()

s = classa()

s.tools()

例項方法需要將類例項化後呼叫,如果使用類直接呼叫例項方法,需要顯式地將例項作為引數傳入。明確特徵是self作為傳入引數,並且位置居於最左側。

,類方法傳入的第乙個引數為cls,是類本身。並且,類方法可以通過類直接呼叫,或通過例項直接呼叫。但無論哪種呼叫方式,最左側傳入的引數一定是類本身,即是cls。

但是值得注意的是

class basea():

def __init__(self):

print("init basea")

@classmethod

def class_method(cls):

print("current class ", cls)

class testa(basea):

pass

if __name__ == '__main__':

testa.class_method()

current class

從執行結果可以看出,無論是類呼叫還是例項呼叫,類方法都能正常工作。且通過列印cls,可以看出cls傳入的都是類例項本身。

在呼叫過程中,無需將類例項化,直接在類之後使用.號運算子呼叫方法。通常情況下,靜態方法使用@staticmethod裝飾器來宣告。而在python 3中,如果乙個類的方法不需要self引數,不再需要宣告為靜態方法,但是這樣的話只能通過類去呼叫這個方法,如果使用例項呼叫這個方法會引發異常。

python中例項方法 靜態方法以及類方法的區別

搞清楚python中例項方法 靜態方法和類方法的區別,先上一段 class person object num 0 類變數 def init self,name self.name name def get name self 例項方法 return self.name staticmethod d...

Python 類方法,例項方法,類變數,例項變數

建立乙個person類 class person object per v per v 建立乙個類變數 def init self,name,age 初始化類例項變數 self.name name self.age age definstance method self 建立類例項方法 print ...

python例項方法 靜態方法 類方法

class foo object deftest self 定義了例項方法 print object classmethod deftest2 clss 定義了類方法 print class staticmethod deftest3 定義了靜態方法 print static 1 例項方法就是類的例...