Я хотел бы использовать экземпляр внутреннего класса (в данном случае namedtuple
, хотя точно такие же симптомы возникают для внутреннего класса, определенного с class
) в качестве значения по умолчанию для метода внешнего класса (вэтот случай конструктор).Однако, когда этот код импортируется из другого модуля, определение внешнего класса, по-видимому, отсутствует.
Пример:
# mymodule.py
from typing import NamedTuple, Tuple
class IdSignal():
Cfg = NamedTuple('IdSignalCfg', [
('nfft', int),
('limits', Tuple[float, float]),
('min_spacing', float),
('nmix', int)])
Cfg.__new__.__defaults__ = (
512,
(1500, 7500),
200,
3
)
def __init__(self, cfg = IdSignal.Cfg()):
self.cfg = cfg
Теперь выполняется import mymodule
throws:
Exception has occurred: NameError
name 'IdSignal' is not defined
File "...", line 18, in IdSignal
def __init__(self, cfg = IdSignal.Cfg()):
File "...", line 5, in <module>
class IdSignal():
...
import mymodule
Смущает, что и pylint, и mypy не распознают никаких ошибок в приведенном выше коде.
Можно ли это сделать любым другим способом?
Я понимаю, что могу использовать None
какзначение по умолчанию и создание экземпляра IdSignal.Cfg
в конструкторе.Если это единственное решение, я хотел бы понять, , почему не работает вышеуказанный код?