2012-04-17 21 views
0

私はファイルnotifications.pycomments.pyを持っています。通知はクラスGetNotificationsで、機能はgetNotifs(arg1, arg2)です。私は私のcomments.pyでこのメソッドを呼び出すしたいと思いますので、私は実行します。Pythonメソッドを呼び出す

from notifications import GetNotifications

その後、私はクラスのインスタンスを作成します。

getNotifsInstance = GetNotifications() 

その後、私はgetNotifsを呼び出すためにしてみてください。 TypeError: getNotifs() takes at most 2 arguments (3 given)

notifsDictionary = getNotifsInstance.getNotifs(arg1, arg2) 

しかし、私はエラーを取得しています

私はそれに2を与えるときに3つの議論を与えていると言っているのはなぜですか?

+1

インスタンスのメソッドを呼び出すと、そのインスタンスは常に最初のパラメータとして渡されます。 – jamylak

答えて

3

インスタンスメソッドを呼び出すと、そのインスタンスが最初のパラメータとして渡されます。メソッドの最初のパラメータとして、引数selfを追加する必要があります。

3

getNotifs()を宣言するときは、おそらくself引数について忘れてしまった:

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

あなたが忘れてしまった、またはOPがしましたか? – jamylak

+0

@jamylak:D'oh!指摘してくれてありがとう。 :) – NPE

+0

hehehehehe ...:D – jamylak

1

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

オブジェクトgetNotifsInstanceのメンバ関数として機能getNotifysにアクセスしているので。任意のメンバ関数の最初の引数は、オブジェクト参照自体(self)です。

あなたが方法の 3種類定義することができますクラスで
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 

それはおそらくです(インスタンス自体)ですが、classmethodデコレータでメソッドをデコレートすると、結果は似ていますが(その場合は、最初の引数として渡されたクラスが得られます)。

関連する問題