【发布时间】:2017-10-28 12:10:55
【问题描述】:
关于这个问题:
python: Two modules and classes with the same name under different packages
是否应该对包中的所有模块进行唯一命名,而不考虑嵌套? PEP8 和 PEP423 似乎没有解决这个问题。
【问题讨论】:
标签: python naming convention
关于这个问题:
python: Two modules and classes with the same name under different packages
是否应该对包中的所有模块进行唯一命名,而不考虑嵌套? PEP8 和 PEP423 似乎没有解决这个问题。
【问题讨论】:
标签: python naming convention
不,不要求不同级别的名称必须不同。每个级别都是一个单独的命名空间。如果 foo.utils 和 foo.bar.utils 在您的项目中有意义,那就这样做吧。
例如,Python 标准库有email.message 和email.mime.message、multiprocessing.connection 以及multiprocessing.dummy.connection 等等:
$ ls ~/Development/Library/cpython/Lib/**/*.py | grep -v __ | grep -v test_ | xargs basename | sort | uniq -c | grep -v ' 1 ' | sort
2 abc.py
2 ascii.py
2 client.py
2 connection.py
2 constants.py
2 dump.py
2 errors.py
2 filelist.py
2 handlers.py
2 log.py
2 message.py
2 parse.py
2 parser.py
2 process.py
2 queues.py
2 server.py
2 spawn.py
2 text.py
2 tree.py
3 main.py
4 config.py
5 support.py
6 util.py
这是出现在包中的所有模块,不止出现一次,不包括测试,__init__.py 和 __main__.py。
【讨论】:
由于包是基于文件系统的,在正常情况下,你不能拥有相同的包,因为文件/目录没有重复。
当然,您可以拥有相同的命名空间包。
也可以在不同的路径中使用相同的包/模块名称。他们按顺序搜索,所以第一个获胜。
【讨论】: