Наследование с вложенными моделями и промежуточные отношения - PullRequest
0 голосов
/ 30 сентября 2018

Я экспериментирую с умным калькулятором (с некоторыми странными методами работы).Он манипулирует объектами, которые имеют общие методы исчисления.Эти объекты являются операндами и различными операторами.Здесь я пытаюсь использовать только один тип оператора: PolarBinaryOperator (может быть, например, «power»), но будет много других.

PolarBinaryOperator связывает два операнда.Операнды не разделяют атрибуты, только методы, такие как методы вычисления.

Наследование:

  • Я не могу сделать операнд абстрактным классом, потому что он должен быть связан операторами, такими как PolarBinaryOperator.
  • Я не могу сделать все операнды уникальной моделью с именем операнд с некоторыми нулевыми значениями, всегда одинаковыми, давая реальную природу операнда.Но, учитывая тип оператора, связанные объекты могут быть другими операндами или объектами.
  • Я пытался использовать тип контента для общих отношений операторов, но это дает плохую производительность.
  • Я пробовал нескольконаследуемое, но дает низкую скорость работы.

Я застрял с решением для типа контента?Или может быть другой возможный образец?

class Operand(models.Model):
    def _nexts(self):
        nexts = Operand.objects.filter(
            lien_operand_origin__operand_origin=self)
        return nexts

    def calculate(self):
        pass

    def calculate2(self):
        pass


class Integer(Operand):
    value = models.models.IntegerField()


class Operator(Operand):
    # Relations
    operand_origin = models.ForeignKey(
        'Operand', related_name='destination_operand')
    operand_destination = models.ForeignKey(
        'Operand', related_name='origin_operand')


class PolarBinaryOperator(Operator):
    type_operator = models.CharField(
        choices=NATURE_CHOICES,
        max_length=2,
    )
...