如何让PyCharm识别__init__.py中动态创建的对象?
解决PyCharm识别不了__init__.py动态生成对象的办法
下面几个方案不用改动你原有的动态实现逻辑,就能让PyCharm正常识别这些运行时生成的对象:
1. 添加类型存根文件(.pyi)
在example文件夹下新建__init__.pyi文件,里面只需要写供IDE识别的符号定义,不用包含实际运行逻辑:
class Example: pass SubExample = Example
PyCharm会自动读取这个存根文件,就能识别到SubExample的存在及其类型。
2. 在原文件中添加仅给IDE识别的假声明
在动态赋值代码的上方,加一段运行时不会执行的假声明,让IDE能解析到目标符号:
class Example: pass # 这段代码仅用于PyCharm识别,运行时不会执行 if False: SubExample = Example globals()['SubExample'] = Example
这种方式不用额外创建文件,直接在原__init__.py里添加几行即可。
3. 利用__all__变量(适合对外导出场景)
如果这些动态生成的对象都是需要对外导出的成员,可以在__init__.py里定义__all__列表,把对象名添加进去:
class Example: pass globals()['SubExample'] = Example __all__ = ['SubExample', 'Example']
这样PyCharm会把这些符号视为模块的导出成员,至少不会再报“找不到对象”的错误,适合只需要识别存在性的场景。
内容的提问来源于stack exchange,提问作者Roelant
相关产品推荐
相关产品推荐

