Python 相同的模块名称约定
Python Same Module Name Convention
参考这个问题:
python: Two modules and classes with the same name under different packages
一个包中的所有模块是否都应该唯一命名,而不考虑嵌套? PEP8 和 PEP423 似乎没有解决这个问题。
不,没有要求不同级别的名称必须不同。每个级别都是一个单独的命名空间。如果 foo.utils
和 foo.bar.utils
在您的项目中有意义,就这样做。
例如,Python标准库有email.message
and email.mime.message
, and multiprocessing.connection
, as well as 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
。
由于包是基于文件系统的,在正常情况下,你不能有相同的包,因为files/directories没有重复包。
当然,您可以拥有相同的命名空间包。
也可以在不同的路径中使用相同的 package/module 名称。他们是按顺序搜索的,所以先赢。
参考这个问题:
python: Two modules and classes with the same name under different packages
一个包中的所有模块是否都应该唯一命名,而不考虑嵌套? PEP8 和 PEP423 似乎没有解决这个问题。
不,没有要求不同级别的名称必须不同。每个级别都是一个单独的命名空间。如果 foo.utils
和 foo.bar.utils
在您的项目中有意义,就这样做。
例如,Python标准库有email.message
and email.mime.message
, and multiprocessing.connection
, as well as 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
。
由于包是基于文件系统的,在正常情况下,你不能有相同的包,因为files/directories没有重复包。
当然,您可以拥有相同的命名空间包。
也可以在不同的路径中使用相同的 package/module 名称。他们是按顺序搜索的,所以先赢。