我的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)
我不理解参数数量的不匹配。发生了什么事?
答案 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):
类方法将方法的类作为第一个参数。