Задание значения вложенного перечисления в качестве параметра по умолчанию в классе __init__ - PullRequest
0 голосов
/ 10 октября 2019

У меня есть вложенное перечисление, которое содержит два возможных значения параметра класса. Я хотел бы указать enum в качестве значения по умолчанию для класса в __init__

Что-то, что выглядело бы так:

from enum import IntEnum as IntEnum
class A:
    class AParam(IntEnum):
        TYPE_1 = 1
        TYPE_2 = 2
    def __init__(self, param=A.AParam.TYPE_1):
        self.param = param

Конечно, это не работает, ядумаю, потому что класс еще не полностью построен.

Альтернативное решение, которое я сейчас делаю, заключается в следующем:

from enum import IntEnum as IntEnum
class A:
    class AParam(IntEnum):
        TYPE_1 = 1
        TYPE_2 = 2

    def __init__(self, param=None):
        if param is None:
            param = A.AParam.TYPE_1
        self.param = param

По нескольким причинам я не хочу использовать строки вместоиз перечислений. Я мог бы также использовать не помещать параметр в init, а просто позволить пользователю класса использовать саму переменную-член. Но тогда параметр по умолчанию не такой явный.

Есть ли другой способ передачи вложенного перечисления в качестве значения по умолчанию для метода __init__? Или это просто невозможно ...?

1 Ответ

1 голос
/ 10 октября 2019

Вы можете рассматривать внутреннюю часть класса как область, мало чем отличающуюся от области внутри функции.

Следовательно, вы можете сделать это:

class A:

    class AParam(IntEnum):
        TYPE_1 = 1
        TYPE_2 = 2

    def __init__(self, param=AParam.TYPE_1):
        self.param = param

Обратите внимание на отсутствующие A..

Эта область действия активна при определении содержимого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...