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 に答える