python - 在Python中确定一个合适的子类来存储特定类型的数据

标签 python django inheritance

我有一组通用属性(例如字符串和整数类型),我想使用以下 django 模型来存储它们:

class Attribute(models.Model):
    item            = models.ForeignKey('Item')

    class Meta:
        abstract = True

    @staticmethod
    def get_subclass_by_type(type):
        TEXT_TYPES = ["text", "string"]
        INTEGER_TYPES = ["integer", "number"]
        if type in TEXT_TYPES: 
            return TextAttribute
        if type in INTEGER_TYPES:
            return IntegerAttribute

class TextAttribute(Attribute):
    value            = models.CharField(max_length=128)

class IntegerAttribute(Attribute):
    value            = models.IntegerField()

我是否错过了任何干净简单的方法来直接定义子类中的类型?类似于:

class Attribute(models.Model):
    item            = models.ForeignKey('Item')

    class Meta:
        abstract = True

    @staticmethod
    def get_subclass_by_type(type):
        <do something>

class TextAttribute(Attribute):
    TYPES            = ["text", "string"]
    value            = models.CharField(max_length=128)

class IntegerAttribute(Attribute):
    TYPES            = ["integer", "number"]
    value            = models.IntegerField()

最佳答案

您可以尝试像下面这样定义方法 get_subclass_by_type

@classmethod def get_subclass_by_type(cls, 类型): 对于 cls.__subclasses__() 中的子类: 如果输入 subcls.TYPE: 返回子类

尚未测试此代码,但我认为它应该有效。

关于python - 在Python中确定一个合适的子类来存储特定类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22711738/

相关文章:

c++ - 不带多态性的抽象基类

python - 使用来自 Celery tasks.py 的 Django Channels 向客户端发送消息

django - 如何在服务器启动时从模型加载对象?

android - 如何更新不在 google play、i store 或 windows store 上的应用程序

java - Java 中的继承

Python - 为什么我可以用实例调用类方法?

python - 给定同样的一段代码,为什么 python 版本比 C 慢 100x+?

python - numpy 更有效的子矩阵

python - 使用 mr.ripley 进行基准测试的语法

python - CSRF验证失败。请求中止 Django 1.6