【发布时间】:2015-01-16 10:40:36
【问题描述】:
当我只想将get 传递给另一个对象时,是否有一种优雅的方式来处理类的所有get 请求?
这是一个 Django 项目,我有一个视频模型;视频可以来自不同的网站(例如 YouTube、Vimeo 等)。该模型是通用的,将获取适当的backend 来解析数据(根据站点的不同,repr 会有所不同)。所有视频都将具有相同的属性,但我有不同的 backend 来正确解析它们。示例如下:
BACKEND_VIDEO_TYPE = (
(1, 'YouTube'),
(2, 'Vimeo'),
)
class Video(ItemBase):
video_id = models.CharField(max_length=25)
video_type = models.PositiveIntegerField(choices=BACKEND_VIDEO_TYPE)
video_data = models.TextField(editable=False)
class Meta:
unique_together = ("video_id", "video_type")
def __init__(self, *args, **kwargs):
super(Video, self).__init__(*args, **kwargs)
for k, v in BACKEND_VIDEO_TYPE:
if k == self.video_type:
VideoBackend = import_string( 'video.backends.' + v )
# load the backend that matches the video type and supply it with the data to parse
self.backend = VideoBackend(self.video_id, self.video_data)
@property
def link(self):
return self.backend.link
@property
def thumbnail(self):
return self.backend.thumbnail
@property
def is_public(self):
return self.backend.is_public()
@property
def duration(self):
return self.backend.duration
我觉得这不是处理这个问题的最佳方法,但我太新了,不知道要寻找什么。在我确定要实现哪个后端类之后,是否有一种简单的方法可以return self.backend.property 而无需添加后端中的每个属性?这份清单将会变得相当长。一个通用的__get__ 或类似的?
感谢您的帮助。
【问题讨论】:
标签: python django class model getter