Я использую Duck Typing в Python.
def flagItem(object_to_flag, account_flagging, flag_type, is_flagged):
if flag_type == Flags.OFFENSIVE:
object_to_flag.is_offensive=is_flagged
elif flag_type == Flags.SPAM:
object_to_flag.is_spam=is_flagged
object_to_flag.is_active=(not is_flagged)
object_to_flag.cleanup()
return object_to_flag.put()
Где различные объекты передаются как object_to_flag
, каждый из которых имеет атрибуты is_active
, is_spam
, is_offensive
. У них также есть метод cleanup()
.
Все объекты, которые я передаю, имеют один и тот же базовый класс (они являются объектами db в Google App Engine):
class User(db.Model):
...
is_active = db.BooleanProperty(default = True)
is_spam = db.BooleanProperty(default=False)
is_offensive = db.BooleanProperty(default=False)
def cleanup():
pass
class Post(db.Model):
...
is_active = db.BooleanProperty(default = True)
is_spam = db.BooleanProperty(default=False)
is_offensive = db.BooleanProperty(default=False)
def cleanup():
pass
Как я могу сделать метод cleanup()
абстрактным, чтобы у меня мог быть один и тот же родительский класс для всех этих объектов, который требует, чтобы дочерние элементы обеспечивали реализацию?
Возможно, что еще важнее, это «питон»? Должен ли я идти по этому пути, или я просто должен полагаться на утку печатать? Я имею опыт работы с Java и пытаюсь научиться работать с Python.
Спасибо!