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而不必重新定义它或传递到方法中?我也不想打电话。我正在使用 Python 2.6。CommonFooFooFooCommonFoo.find(Foo, 3)

编辑: derp,看起来我有另一个我没有注意到的find声明,它导致了. 我会删除这个问题,但 Nix 提到了代码异味,所以现在我就如何避免以无异味的方式在我的所有模型类中进行定义征求建议。CommonTypeErrorfind

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 回答