Python中Function(函数)和method(方法)
在Python中,對這兩個東西有明確的規(guī)定:
函數(shù)function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.
方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
從定義的角度上看,我們知道函數(shù)(function)就相當(dāng)于一個數(shù)學(xué)公式,它理論上不與其它東西關(guān)系,它只需要相關(guān)的參數(shù)就可以。所以普通的在module中定義的稱謂函數(shù)是很有道理的。
那么方法的意思就很明確了,它是與某個對象相互關(guān)聯(lián)的,也就是說它的實現(xiàn)與某個對象有關(guān)聯(lián)關(guān)系。這就是方法。雖然它的定義方式和函數(shù)是一樣的。也就是說,在Class定義的函數(shù)就是方法。
從上面的角度看似乎很有道理。
>>> def fun():
pass
>>> type(fun)
<class 'function'> #沒有問題
>>> class Cla():
def fun():
pass
@classmethod
def fun1(cls):
pass
@staticmethod
def fun2():
pass
>>> i=Cla()
>>> Cla.fun.__class__
<class 'function'> #為什么還是函數(shù)
>>> i.fun.__class__ #這個還像話
<class 'method'>
>>> type(Cla.fun1)
<class 'method'> #這里又是方法
>>> type(i.fun1)
<class 'method'> #這里仍然是方法
>>> type(Cla.fun2)
<class 'function'> #這里卻是函數(shù)
>>> type(i.fun2)
<class 'function'> #這里卻是函數(shù)
事實上,上面的結(jié)果是可以解釋的:
1,普通方法(老版中直接就是"instancemethod")在module中與在Class中定義的普通函數(shù),從其本身而言是沒有什么區(qū)別的,他們都是對象函數(shù)屬性。 之所以會被說在Class中的定義的函數(shù)被稱為方法,是因為它本來就是面向?qū)淼膶嵗龑ο蟮?#xff0c;其實他們就是實例方法,這些方法是與實例相聯(lián)系的(從實例出發(fā)訪問該函數(shù)會自動賦值)。所以你從Class訪問仍然是一個函數(shù)
2,類方法("classmethod"),因為類同樣是對象,所以如果函數(shù)與類進行聯(lián)系了話(與實例方法一樣的模式)那么就能夠這么說了!
3,靜態(tài)方法,雖然定義在內(nèi)部,并且也較方法,但是卻不與任何對象聯(lián)系,與從類訪問方法是一樣的,他們?nèi)匀皇呛瘮?shù)。
這樣看來上面的定義可以改改了:
函數(shù)的定義自然不變。
方法的定義可以是這樣的,與某個對象進行綁定使用的函數(shù)。注意哦。綁定不是指" . "這個符號,這個符號說實在的只有域名的作用。綁定在這里是指,會默認(rèn)賦值該綁定的對象。
總結(jié)
以上是生活随笔為你收集整理的Python中Function(函数)和method(方法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用eval在txt中存储list,dic
- 下一篇: 全面解析python类的绑定方法与非绑定