Как ссылаться на внутренний класс или атрибут до того, как он будет полностью определен?Python

Программы на Python
Ответить
Anonymous
 Как ссылаться на внутренний класс или атрибут до того, как он будет полностью определен?

Сообщение Anonymous »

У меня есть сценарий, в котором класс содержит внутренний класс, и я хочу ссылаться на этот внутренний класс (или его атрибуты) внутри внешнего класса. Вот конкретный пример использования Django:

Код: Выделить всё

from django.db import models
from django.utils.translation import gettext_lazy as _

class DummyModel(models.Model):

class StatusChoices(models.TextChoices):
ACTIVE = "active", _("Active")
INACTIVE = "inactive", _("Inactive")

status = models.CharField(
max_length=15,
choices=StatusChoices.choices,
verbose_name=_("Status"),
help_text=_("Current status of the model."),
default=StatusChoices.ACTIVE,
null=False,
blank=False,
)

class Meta:
verbose_name = _("Dummy Model")
verbose_name_plural = _("Dummy Models")
constraints = [
models.CheckConstraint(
name="%(app_label)s_%(class)s_status_valid",
check=models.Q(status__in=[choice.value for choice in DummyModel.StatusChoices]),
)
]
В этом случае список ограничений в классе Meta пытается ссылаться на DummyModel.StatusChoices. Однако на момент оценки этой ссылки DummyModel не полностью определена, что приводит к ошибке (ни один StatusChoices не доступен в этой строке).
I хотелось бы решить эту проблему без существенного изменения структуры кода —

Код: Выделить всё

StatusChoices
должен оставаться определенным внутри DummyModel.
Как решить эту проблему, сохраняя при этом внутренний класс и его атрибуты доступными по назначению?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ly-defined
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»