Я экспериментирую с умным калькулятором (с некоторыми странными методами работы).Он манипулирует объектами, которые имеют общие методы исчисления.Эти объекты являются операндами и различными операторами.Здесь я пытаюсь использовать только один тип оператора: 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,
)