2012-04-17 87 views
0

我有一個文件notifications.pycomments.py。通知的類別爲GetNotifications,功能getNotifs(arg1, arg2)。我想調用此方法在我comments.py,所以我做的:調用python方法

from notifications import GetNotifications

然後,我創建類的實例:

getNotifsInstance = GetNotifications() 

然後我打電話getNotifs:

notifsDictionary = getNotifsInstance.getNotifs(arg1, arg2) 

不過,我發現了錯誤: TypeError: getNotifs() takes at most 2 arguments (3 given)

爲什麼當我只給它2個時,我給它3個參數?

+1

當您調用一個實例的方法時,它總是將自身作爲第一個參數傳遞。 – jamylak 2012-04-17 15:08:10

回答

3

你給了它三個參數:當你調用實例方法時,實例作爲第一個參數傳遞。您應該添加一個參數self作爲該方法的第一個參數。

3

你聲明getNotifs()時最有可能忘記了self說法:

def getNotifs(self, arg1, arg2): 
    ... 
+1

你忘了,還是OP呢? – jamylak 2012-04-17 15:10:36

+0

@jamylak:D'oh!感謝您指出。 :) – NPE 2012-04-17 15:19:19

+0

hehehehehe ...:d – jamylak 2012-04-17 15:20:43

1

Why is it saying I'm giving it 3 arguments when I'm only giving it 2?

很簡單,因爲你正在訪問的功能getNotifys爲對象getNotifsInstance的成員函數。任何成員函數的第一個參數是(self)對象引用本身。

1

在課堂上,你可以定義三種方法

class A(object): 
    def instance_method(*args): 
     print '%d arguments given' % len(args) 
    @classmethod 
    def class_method(*args): 
     print '%d arguments given' % len(args) 
    @staticmethod 
    def static_method(*args): 
     print '%d arguments given' % len(args) 

當你調用它們的實例,你會得到額外的參數傳遞給實例方法(這將是實例本身)和類方法(這將是一個類實例的):

>>> a = A() 
>>> a.instance_method('a', 'b') 
3 arguments given 
>>> a.class_method('a', 'b') 
3 arguments given 
>>> a.static_method('a', 'b') 
2 arguments given 

在你的情況下,它可能是self(實例本身),雖然結果會類似,如果你要裝飾你的方法classmethod裝飾(在這種情況下,你會得到一個類作爲第一個參數傳遞)。