静态方法- Python -基类中的类方法可以通过子类访问,而不需要传入类



我试图在基类中定义一些方法,然后可以用作子类上的类/静态方法,如:

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)

我如何在Common中定义find,使其在Foo中可用,而无需在Foo中重新定义它或在Foo中对Common中的方法进行直通?我也不想调用Foo.find(Foo, 3)。我正在使用Python 2.6.

Edit: derp,看起来我在Common中声明了另一个find,我没有注意到,这导致了TypeError。我想删除这个问题,但是Nix提到了代码气味,所以现在我请求关于如何避免在所有模型类中以无臭味的方式定义find的建议。

这并不能完全回答你的问题,但它可能对你有用。

SQLAlchemy会话实例具有query_property(),它返回一个类属性,该属性生成针对该类的查询。因此,您可以实现类似于find()方法的内容:

Base = declarative_base()
Base.query = db_session.query_property()
class Foo(Base):
    pass
Foo.query.get(id)

问题是我在Common中定义了另一个find方法,因此这是使用并导致TypeError的方法。

相关内容

最新更新