我在 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()
方法。
我传入的对象都具有相同的基类(它们是 Google App Engine 中的 db 对象):
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()
方法抽象,以便我可以为所有这些需要子提供实现的对象拥有相同的父类?
也许更重要的是,这是“pythonic”吗?我应该走这条路,还是应该只依靠鸭子打字?我的背景是 Java,我正在尝试学习 Python 的做事方式。
谢谢!