Я пытаюсь определить некоторые методы в базовом классе, которые затем можно использовать в качестве классов / статических методов в дочернем классе, например:
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
вCommon
такой, что его можно использовать в Foo
без необходимости переопределять его в Foo
или выполнить переход в Foo
к методу в Common
?Я также не хочу звонить Foo.find(Foo, 3)
.Я использую Python 2.6.
Edit: derp, похоже, у меня был еще один find
, объявленный в Common
, который я не заметил, и это вызывало TypeError
.Я бы удалил этот вопрос, но Никс упомянул о запахах кода, поэтому теперь я прошу дать советы о том, как избежать определения find
во всех моих модельных классах не вонючим способом.