自定义types.py模块引用报错:AttributeError及namedtuples复用咨询
解决自定义
types.py与Python内置模块冲突的问题 这个问题太常见了——你给自己的文件起了和Python内置模块一样的名字,导致导入的时候优先加载了内置的types模块,自然找不到你定义的Dataset命名元组。下面给你几个靠谱的解决办法:
方法1:重命名自定义文件(最推荐)
直接把你的types.py改成一个不会和内置模块重名的名字,比如data_types.py、my_types.py或者dataset_types.py。这样彻底避免冲突,后续使用也更清晰。
比如改完后,在其他文件里导入:
# 导入整个模块 import data_types my_dataset = data_types.Dataset(name="train", path="./data/train") # 或者直接导入需要的命名元组 from data_types import Dataset my_dataset = Dataset(name="train", path="./data/train")
方法2:调整导入方式(不改名的情况下)
如果实在不想改文件名,你可以通过相对导入或绝对导入来指定加载你自己的types.py:
相对导入(同一目录下的文件)
如果要导入的文件和你的types.py在同一个文件夹里,用相对导入:
# 注意前面的点,代表当前目录 from .types import Dataset my_dataset = Dataset(name="train", path="./data/train")
绝对导入(基于项目包名)
如果你的项目是一个可导入的包(比如项目根目录有__init__.py),可以用绝对导入,假设你的项目包名叫my_project:
from my_project.types import Dataset my_dataset = Dataset(name="train", path="./data/train")
额外提醒
尽量避免用Python内置模块的名字来命名自己的文件,比如types、sys、os、json这些,不然很容易出现这种导入冲突的问题,这也是Python开发的最佳实践之一。
内容的提问来源于stack exchange,提问作者PeterHeuz
相关产品推荐
相关产品推荐

