Python noob无法获得类方法

时间:2011-02-01 17:31:50

标签: python class-method

我的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)

我不理解参数数量的不匹配。发生了什么事?

2 个答案:

答案 0 :(得分:13)

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变体。

答案 1 :(得分:5)

你想:

@classmethod
def save_from_row(cls, row):

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