【问题标题】:Inheriting assigned properties from a mix-in从混合中继承分配的属性
【发布时间】:2010-11-01 22:30:11
【问题描述】:

我想使用一个混合类来为模型添加属性。

from google.appengine.ext import db

class Taggable(object):
    tag_list = db.StringListProperty()

    def attach_tag(self, tag):
        self.tag_list.append(tag)
        self.put()

    def remove_tag(self, tag):
        self.tag_list.pop(self.tag_list.index(tag))
        self.put()

class Post(db.Model, Taggable):
    title = db.TextProperty()

这只是一个例子,没有必要对不良做法或其他事情嗤之以鼻。

目前,我有类似的东西,除了我必须将tag_list = db.StringListProperty() 放在混入之外(否则会出错),这是混乱的代码,我想避免这种情况。

简单地说,我如何从混入中将属性(例如tag_list)分配给模型?

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    Taggable 不应该基于 db.Model 而不是对象吗?

    【讨论】:

    • 应该吗?我不希望 Taggable 成为实体类型,我只想继承它的功能。
    • 是的。然后它也将是直接继承而不是混合。
    • @Noah。我很确定它不会是实体类型,除非您直接实例化 Taggable。您可以将其用作虚拟类。
    • 准确地说,数据存储在执行 put 之前不会创建实体类型。并且创建的种类对应于继承的类(Post)。
    • @Noah 颠倒超类的顺序 - (Taggable, db.Model),它应该可以正常工作。 'mixin' 有必要继承 db.Model,因为 db.Model 有一个元类,它可以通过各种魔法使属性起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多