我想使用一个内部类的实例(在这种情况下,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抛出:
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 在构造函数中实例化。如果这是唯一的解决方案,我想了解为什么上面的代码会失败?