方法是通過 def 申明創造的函式
方法的工作方式與簡單的函式一樣。但是有種例外的情況:方法的第乙個引數接受的是例項物件。
1, 例項方法:
2, 類方法:使用類屬性def
f(self, *arg)
3,靜態方法:不包含任何有關類的資訊@classmethod
defcf
(cls, *arg)
對於例項方法的工作原理類似類方法。實際上,python自動對映例項方法呼叫到類方法。即:@staticmethod
defsf
(*arg)
instance.method(args,...)
將自動轉換為類方法的呼叫:
class.method(instance, args,...)
假設有如下類以及例項方法:class a(object):
def method
(self, num)
(num)
a = a
()a.method
(4)# 4
a.method
(a, 4)
# 4
由於f()是例項方法,通過例項來呼叫;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
a呼叫f()時,python將自動替換self為例項物件 a 。a = a()
a.f("instance call")
# instance call
對於類方法,直接通過類名來呼叫:
message 是類的屬性。a.cf()
# class message
1, 繫結方法:
例項方法:上面定義的類中的 f()
類方法:上面定義的類中的 cf()
2, 非繫結方法:對於類呼叫:```
a.f# >
a.cf
# >
a.cf
# >
```
常見靜態方法的定義為:```
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通常...