При инициализации класса аргумент по умолчанию для параметра является атрибутом класса константы.
class SomeClass:
"""Some class."""
DEFAULT_VAL = 0
def __init__(self, some_param: int = DEFAULT_VAL):
print(f"default = {self.DEFAULT_VAL} and some_param = {some_param}.")
some_class = SomeClass()
Печать: default = 0 and some_param = 0.
Когда я создаю подкласс класса и переопределяю константу Атрибут класса, он не использует его в качестве параметра по умолчанию.
class SomeChildClass(SomeClass):
"""Some child class."""
DEFAULT_VAL = 1
some_child_class = SomeChildClass()
Печать: default = 1 and some_param = 0.
Есть ли какой-нибудь способ, которым я могу сделать эту работу, без явного переопределения __init__
в дочернем классе?
Исследования
Как вызвать родительский класс init со значениями по умолчанию из дочернего класса?
Вопрос очень похож, но они переопределяют __init__
.
Повторная инициализация атрибутов родительского класса во время определения дочернего класса
Представляет возможное решение используя metaclass
для указания DEFAULT_VAL
через __new__
. Это решение добавляет многословие к SomeClass
, что не так уж и плохо. Мне интересно, если это можно сделать еще проще, хотя.
Переопределение переменных класса в python
В этот ответ , он информирует меня проблема в том, что DEFAULT_VAL
вычисляется, когда определена функция __init__
. Однако я не совсем уверен, применимо ли classmethod
в моем случае использования.