0

私はTipfyでPersonEditHandlerクラスを使用しPersonエンティティを編集しています。get()メソッドとpost()メソッドを作成しましたが、self.personを参照すると( getメソッドが既存の人物をキーで検出 したかどうかを確認するため)、「オブジェクトに属性がありません」というエラーが発生します。

これは、 RequestHandlerJinja2Mixinから継承しているため、 initメソッドで初期化しないためです。ただし、initをオーバーライドすると、別のエラーが発生します。'TypeError:init()は正確に1つの引数(3つ指定)を取ります'

コードは次のとおりです。

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    def __init__(self): 
        PersonEditHandler.__init__(self) 
        # ...or 'super(PersonEditHandler, self).__init__()' 
        self.person = None 

多重継承のために問題がありますか?新しいレコードを作成せずに、取得したレコードをtipfyで編集するための最良の方法は何ですか?

4

1 に答える 1

1

__init__前に、クラス属性を追加することをお勧めします。

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    person = None

このように、特定のインスタンスに設定されたことのないにアクセスすると、クラスに依存し、必要に応じて取得します。を設定すると、必要に応じてエンティティに設定されます。self.personselfNone self.person

ミックスインによる多重継承は一般的には問題ありませんが、お気づきのように、との問題がやや曖昧になる可能性があります(正直なところ、ここで3つの引数を受け取ることについてどのクラスが泣き言を言っているの__new__わかりません...完全なトレースバックを示し、先ほど提案したように問題を解決する方が簡単です;-)。__init__

于 2010-08-01T17:04:00.030 に答える