我正在构建具有可选Facebook登录的Web应用程序。通过Facebook API创建的用户在我的应用程序中的多个点处理方式不同。我想将这些差异封装在覆盖方法的子类Person
中。如何根据行信息决定要实例化哪个声明模型
class Person(Model):
def get_profile_picture(self):
return profile_pictures.url(self.picture)
class FacebookPerson(Person):
def get_profile_picture(self):
return 'http:/.../%s.jpg' % self.graph_id
我想避免讨厌的if self.graph_id
,只是查询Person模型,并得到每个用户的合适的对象。
我想到了黑客入侵的metaclass来添加FacebookPerson作为基础。显然我想避免这种巫术。
我正在使用Flask和Flask-SQLAlchemy。