0

我有一个文件notifications.pycomments.py. 通知有一个GetNotifications带有函数的类getNotifs(arg1, arg2)。我想在我的comments.py中调用这个方法,所以我这样做:

from notifications import GetNotifications

然后我创建一个类的实例:

getNotifsInstance = GetNotifications()

然后我尝试调用 getNotifs:

notifsDictionary = getNotifsInstance.getNotifs(arg1, arg2)

但是,我收到了错误: TypeError: getNotifs() takes at most 2 arguments (3 given)

为什么我只给它 2 个参数,却说我给它 3 个参数?

4

4 回答 4

3

你给它三个参数:当你调用一个实例方法时,实例作为第一个参数传递。您应该添加一个参数self作为该方法的第一个参数。

于 2012-04-17T15:08:23.477 回答
3

你很可能self在声明时忘记了这个论点getNotifs()

def getNotifs(self, arg1, arg2):
   ...
于 2012-04-17T15:09:00.020 回答
1

为什么我只给它 2 个参数,却说我给它 3 个参数?

仅仅因为您将函数getNotifys作为 object 的成员函数访问getNotifsInstance。任何成员函数的第一个参数是 ( self) 对象引用本身。

于 2012-04-17T15:09:14.987 回答
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(在这种情况下,您将获得一个作为第一个参数传递的类)。

于 2012-04-17T15:22:14.453 回答