1

我的Customer课堂上有一个名为save_from_row(). 它看起来像这样:

@classmethod
def save_from_row(row):
    c = Customer()
    c.name = row.value('customer', 'name')
    c.customer_number = row.value('customer', 'number')
    c.social_security_number = row.value('customer', 'social_security_number')
    c.phone = row.value('customer', 'phone')
    c.save()
    return c

当我尝试运行我的脚本时,我得到了这个:

Traceback (most recent call last):
  File "./import.py", line 16, in <module>
    Customer.save_from_row(row)
TypeError: save_from_row() takes exactly 1 argument (2 given)

我不明白参数数量的不匹配。这是怎么回事?

4

2 回答 2

13

a 的第一个参数classmethod是类本身。尝试

@classmethod
def save_from_row(cls, row):
    c = cls()
    # ...
    return c

或者

@staticmethod
def save_from_row(row):
    c = Customer()
    # ...
    return c

classmethod变体将能够创建Customer具有相同工厂功能的子类。

而不是staticmethod变体,我通常会使用模块级函数。

于 2011-02-01T17:33:58.433 回答
5

你要:

@classmethod
def save_from_row(cls, row):

类方法获取方法的类作为第一个参数。

于 2011-02-01T17:33:06.987 回答