我可以从不同的 Python 类型存根文件中重新导出类型吗?

Can I re-export a type from a different Python type stub file?

我正在为专有 Python 平台编写类型存根。平台经常在某些模块中定义类,然后从其他模块中重新导出。我需要我的类型存根来反映该类型存在于多个文件中。

例如

_foo.py:

class SomeType:
    # Implementation here

foo.py:

from _foo import SomeType

如何为这些文件编写类型存根?

我试过这个:

_foo.py我:

class SomeType:
    ...

foo.py我:

from _foo import SomeType

但是它不起作用,mypy 抛出这个错误:

error: name 'foo.SomeType' is not defined

有没有办法在不将类型存根复制粘贴到两个文件中的情况下完成这项工作?

经过一些尝试和错误,我注意到这个有效:

foo.pyi:

from _foo import SomeType

__all__ = ["SomeType"]

虽然我对此并不感到兴奋,因为它看起来可能有副作用,但目前它有效。

请查看 the import section 类型的存根文档,它应该会提供您所需要的答案。

__all__ 如果你想导出私有变量/类型(带下划线前缀),实际上很有用。如果你真的不喜欢那样,你可以使用 import as 形式:

from _foo import SomeType as SomeType

它保证SomeType被重新导出。