2012-04-17 60 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装饰(在这种情况下,你会得到一个类作为第一个参数传递)。