❶ python里method和function的區別
呃,確實誤導了。
function
和
method
是兩個不同的語境下的概念。function
是從代碼機制角度來說的,表示函數這個機制,它是與「語句」相對應的概念。而
method
是從面向對象機制角度來說的,它表示類或對象的一個方法(也稱操作),它是與「屬性」等相對應的概念。
通常來說,function
與
method
是可以互換的。嚴格地說,雖然方法是由函數來實現的,但所有的函數並不一定是方法,例如:構造函數、析構函數、屬性訪問器等等都是由函數實現的,但它們都不是方法。有些私有函數的設計意圖也是從面向過程來考慮的,並不是要提供一個
method。
❷ python 方法和函數的區別
在Python中,對這兩個東西有明確的規定:
函數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).
從定義的角度上看,我們知道函數(function)就相當於一個數學公式,它理論上不與其它東西關系,它只需要相關的參數就可以。所以普通的在mole中定義的稱謂函數是很有道理的。
那麼方法的意思就很明確了,它是與某個對象相互關聯的,也就是說它的實現與某個對象有關聯關系。這就是方法。雖然它的定義方式和函數是一樣的。也就是說,在Class定義的函數就是方法。
從上面的角度看似乎很有道理。
>>> 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'> #為什麼還是函數
>>> i.fun.__class__ #這個還像話
<class 'method'>
>>> type(Cla.fun1)
<class 'method'>#這里又是方法
>>> type(i.fun1)
<class 'method'>#這里仍然是方法
>>> type(Cla.fun2)
<class 'function'>#這里卻是函數
>>> type(i.fun2)
<class 'function'>#這里卻是函數
事實上,上面的結果是可以解釋的:
1,普通方法(老版中直接就是"instancemethod")在mole中與在Class中定義的普通函數,從其本身而言是沒有什麼區別的,他們都是對象函數屬性。 之所以會被說在Class中的定義的函數被稱為方法,是因為它本來就是面向將來的實例對象的,其實他們就是實例方法,這些方法是與實例相聯系的(從實例出發訪問該函數會自動賦值)。所以你從Class訪問仍然是一個函數
2,類方法("classmethod"),因為類同樣是對象,所以如果函數與類進行聯系了話(與實例方法一樣的模式)那麼就能夠這么說了!
3,靜態方法,雖然定義在內部,並且也較方法,但是卻不與任何對象聯系,與從類訪問方法是一樣的,他們仍然是函數。
這樣看來上面的定義可以改改了:
函數的定義自然不變。
方法的定義可以是這樣的,與某個對象進行綁定使用的函數。注意哦。綁定不是指" . "這個符號,這個符號說實在的只有域名的作用。綁定在這里是指,會默認賦值該綁定的對象。
❸ 方法和函數有什麼區別
方法和函數的區別:
1)函數是一段代碼,通過名字來進行調用。它能將一些數據(參數)傳遞進去進行處理,然後返回一些數據(返回值),也可以沒有返回值。
所有傳遞給函數的數據都是顯式傳遞的。函數和對象無關。
2)方法也是一段代碼,也通過名字來進行調用,但它跟一個對象相關聯。方法和函數大致上是相同的,但有兩個主要的不同之處:
方法中的數據是隱式傳遞的;方法和對象相關。
方法可以操作類內部的數據(請記住,對象是類的實例化–類定義了一個數據類型,而對象是該數據類型的一個實例化)
3)方法在 C++ 中是被稱為成員函數」。因此,在 C++ 中的「方法」和「函數」的區別,就是「成員函數」和「函數」的區別。此外,諸如 Java一類的編程語言只有「方法」。所以這時候就是「靜態方法」和「方法」直接的區別。
4)Java中只有方法,C中只有函數,而C++里取決於是否在類中。
❹ python類和函數的區別
可以有類方法(查查什麼是class method),不需實例化也可以使用的。
python的類和函數的區別主要在於類可以有變數和各種方法,而函數沒有。函數只能被運行,返回或者不返回值都可以。
模塊如果沒有把類聲明為私有,其他模塊就可以使用這個類,方法是import這個模塊,然後用"模塊名.類名"來調用。
❺ python類和函數的區別
一、主體不同
1、類:是面向對象程序設計實現信息封裝的基礎。
2、函數:是指一段在一起的、可以做某一件事兒的程序。也叫做子程序、(OOP中)方法。
二、特點不同
1、類:是一種用戶定義的引用數據類型,也稱類類型。每個類包含數據說明和一組操作數據或傳遞消息的函數。類的實例稱為對象。
2、函數:分為全局函數、全局靜態函數;在類中還可以定義構造函數、析構函數、拷貝構造函數、成員函數、友元函數、運算符重載函數、內聯函數等。
三、規則不同
1、類:實質是一種引用數據類型,類似於byte、short、int(char)、long、float、double等基本數據類型,不同的是它是一種復雜的數據類型。
2、函數:函數必須聲明後才可以被調用。調用格式為:函數名(實參)調用時函數名後的小括弧中的實參必須和聲明函數時的函數括弧中的形參個數相同。
❻ python中方法和函數的區別是什麼什麼時候要帶self
定義一個函數就是定義一個方法,self是自身,調用的時候如果需要傳入魔法方法__init__(初始定義的值【也就是參數】)時就需要帶self,不需要則可以在函數(即方法)前加修飾@staticmethod,就不用帶self參數了。