Python noob无法获得类方法

Jas*_*ett 1 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
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

Sve*_*ach 13

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

@classmethod
def save_from_row(cls, row):
    c = cls()
    # ...
    return c
Run Code Online (Sandbox Code Playgroud)

要么

@staticmethod
def save_from_row(row):
    c = Customer()
    # ...
    return c
Run Code Online (Sandbox Code Playgroud)

classmethod变体将允许创建Customer具有相同工厂函数的子类.

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


a p*_*erd 5

你要:

@classmethod
def save_from_row(cls, row):
Run Code Online (Sandbox Code Playgroud)

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