類方法與靜態方法

2021-07-17 03:05:38 字數 2356 閱讀 7114

方法是通過 def 申明創造的函式

方法的工作方式與簡單的函式一樣。但是有種例外的情況:方法的第乙個引數接受的是例項物件。

1, 例項方法:

def

f(self, *arg)

2, 類方法:使用類屬性

@classmethod

defcf

(cls, *arg)

3,靜態方法:不包含任何有關類的資訊

@staticmethod

defsf

(*arg)

對於例項方法的工作原理類似類方法。實際上,python自動對映例項方法呼叫到類方法。即:

instance.method(args,...)
將自動轉換為類方法的呼叫:

class.method(instance, args,...)
class a(object):

def method

(self, num)

print

(num)

a = a

()a.method

(4)# 4

a.method

(a, 4)

# 4

假設有如下類以及例項方法:

class

a(object):

message = "class message"

@classmethod

defcf

(cls):

print(cls.message)

deff(self, msg):

self.message = msg

print(self.message)

def__str__

(self):

return self.message

由於f()是例項方法,通過例項來呼叫;

a = a()

a.f("instance call")

# instance call

a呼叫f()時,python將自動替換self為例項物件 a 。

對於類方法,直接通過類名來呼叫:

a.cf()

# class message

message 是類的屬性。

1, 繫結方法:

例項方法:上面定義的類中的 f()

類方法:上面定義的類中的 cf()

```

a.f# >

a.cf

# >

a.cf

# >

```

2, 非繫結方法:對於類呼叫:

```

a.f# ```

常見靜態方法的定義為:

class

b(object):

@staticmethod

deffoo

():pass

以上定義與以下等同:

class

b(object):

deffoo

():pass

foo = staticmethod(foo)

假設有乙個典型的例項計數程式:

class

count

(object):

ninstances = 0

def__init__

(self):

count.ninstances = count.ninstances + 1

@staticmethod

defmun_instances

(): print("number of instances :", count.ninstances)

a = count()

b = count()

c =count()

#例項化在不斷修改類的屬性。

count.mun_instances()

#類呼叫

#number of instances : 3

a.mun_instances()

#例項呼叫

#number of instances : 3

a.num_instances

## 即靜態類也是非繫結方法,函式

參考文章

class method vs static method 2016

類方法與靜態方法

類方法和靜態方法 class person object slots name age 類屬性 num 0 建構函式 def init self,name,age 例項屬性 self.name name self.age age 例項函式 形參列表的第乙個引數必須為self,表示當前物件 def s...

C 靜態類 靜態方法與非靜態方法比較

在類 class 上加入static修飾,表示該類無法被例項化,並將該類中,無法例項化變數或函式 靜態類的主要特性 所以,可以在普通類中新增靜態方法,但是靜態類中的方法 變數都必須是靜態的。一 靜態方法 使用static修改的方法就是靜態方法,否則就是非靜態方法。二 1 靜態成員屬於類的所以,非靜態...

類方法,靜態方法

coding utf 8 class test object walk 為普通方法只能被物件instance呼叫,play 為靜態方法可以被物件和classname呼叫,eat為類方法,可以被物件和classname呼叫。此外pep8中一種程式設計風格,self通常用作例項方法的第一引數,cls通常...