0

基本クラスでいくつかのメソッドを定義しようとしています。これらのメソッドは、次のように、子クラスのクラス/静的メソッドとして使用できます。

class Common():
    @classmethod
    def find(cls, id): # When Foo.find is called, cls needs to be Foo
        rows = Session.query(cls)
        rows = rows.filter(cls.id == id)
        return rows.first()

class Foo(Common):
    pass

>> Foo.find(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: find() takes exactly 2 arguments (1 given)

で再定義したり、のメソッドにパススルーしたりすることなく、で使用できるように定義findするにはどうすればよいですか?私も電話する必要はありません。Python2.6を使用しています。CommonFooFooFooCommonFoo.find(Foo, 3)

編集: derp、気づかなかったという点で別のfind宣言があったようですCommonが、それが原因でしたTypeErrorfind私はこの質問を削除しますが、Nixはコードの臭いについて言及したので、今度はすべてのモデルクラスを臭いのない方法で定義しないようにする方法について提案を求めます。

4

2 に答える 2

0

これはあなたの質問に完全には答えませんが、あなたにとって役立つかもしれません。

SQLAlchemyセッションインスタンスにquery_property()は、クラスに対するクエリを生成するクラスプロパティを返すがあります。find()したがって、次のように、メソッドに似たものを実装できます。

Base = declarative_base()
Base.query = db_session.query_property()

class Foo(Base):
    pass

Foo.query.get(id)
于 2011-07-08T17:47:54.380 に答える
0

問題は、でfind定義された別のメソッドCommonがあったため、それが使用されて、を引き起こしたものでしたTypeError

于 2011-08-03T21:33:52.183 に答える