m4j*_*sun 33 python filenames camelcasing naming-conventions
我知道Python中的类通常使用camelCase.
如果文件只包含类,那么包含该类的文件也是camelCase也是常规约定吗?
例如,是否应该将类className存储在?className.py而不是class_name.py?
Cai*_*ver 33
以下答案主要来自这个答案.
如果您要遵循PEP 8,您应该坚持全小写名称,并带有可选的下划线.
模块应具有简短的全小写名称.如果提高可读性,则可以在模块名称中使用下划线.
对于课程:
类名通常应使用CapWords约定.
有关模块,类和包之间的区别,请参阅此答案:
Python模块只是一个Python源文件,它可以公开类,函数和全局变量.
Buv*_*inJ 12
官方约定是对文件名使用全部小写(正如其他人已经说明的那样)。然而,原因并没有被提及......
由于 Python 跨平台工作(并且以这种方式使用它很常见),但是文件系统在大小写的使用方面有所不同,因此最好消除替代情况。例如,在 Linux 中,可以将 MyClass.py 和 myclass.py 放在同一目录中。在 Windows 中并非如此!
在相关说明中,如果您在 git 存储库中有 MyClass.py 和 myclass.py,或者甚至只是更改同一文件的大小写,当您从 Linux 和 Windows 推/拉时,git 可能会表现得很时髦。
而且,虽然几乎没有主题,但同样,SQL 也有这些相同的问题,其中不同的标准和配置可能允许也可能不允许表名使用大写。
就我个人而言,即使在文件名上阅读 TitleCasing / camelCasing 也更令人愉快,但是当你做任何可以跨平台工作的事情时,最好不要这样做。
我的问题是,将包含类的文件也使用驼峰命名是否也是正常的约定,特别是如果文件只包含类
简短的回答:没有。
更长的答案:应根据需要全部使用小写和下划线。
来自PEP8“包和模块名称”:
模块应该有简短的全小写名称。如果可以提高可读性,可以在模块名称中使用下划线。Python 包也应该有简短的、全小写的名称,但不鼓励使用下划线。
如果您不清楚模块是什么:
模块是包含 Python 定义和语句的文件。文件名是后缀 .py 的模块名称。
首先,如上所述,类名应该是大写字母,例如:
class SampleClass:
...
Run Code Online (Sandbox Code Playgroud)
注意:文件(模块)和类的名称相同会造成混乱。
示例 1:假设您有以下模块结构:
src/
__init__.py
SampleClass.py
main.py
Run Code Online (Sandbox Code Playgroud)
你的SampleClass.py是:
src/
__init__.py
SampleClass.py
main.py
Run Code Online (Sandbox Code Playgroud)
你的main.py是:
class SampleClass:
...
Run Code Online (Sandbox Code Playgroud)
这段代码可以工作吗?不,因为你应该做from src.SampleClass import SampleClass或instance = SampleClass.SampleClass()。尴尬的代码,不是吗?
您还可以通过添加以下内容来修复它__init__.py:
from src import SampleClass
instance = SampleClass()
Run Code Online (Sandbox Code Playgroud)
这就引出了示例 2。
示例 2:假设您开发一个模块:
src/
__init__.py
BaseClass.py
ConcreteClass.py
main.py
Run Code Online (Sandbox Code Playgroud)
BaseClass.py内容:
from .SampleClass import SampleClass
Run Code Online (Sandbox Code Playgroud)
ConcreteClass.py内容:
src/
__init__.py
BaseClass.py
ConcreteClass.py
main.py
Run Code Online (Sandbox Code Playgroud)
还有你的__init__.py内容:
class BaseClass:
...
Run Code Online (Sandbox Code Playgroud)
内容main.py是:
from src import BaseClass
class ConcreteClass(BaseClass):
...
Run Code Online (Sandbox Code Playgroud)
代码失败并出现错误:
from .ConcreteClass import ConcreteClass
from .BaseClass import BaseClass
Run Code Online (Sandbox Code Playgroud)
我花了一段时间才理解该错误以及为什么我无法从该类继承,因为在前面的示例中,当我将导出添加到文件时__init__.py一切正常。如果您使用蛇形文件名,它不能解决问题,但错误更容易理解:
from src import ConcreteClass
instance = ConcreteClass()
Run Code Online (Sandbox Code Playgroud)
要修复代码,您需要将导入修复ConcreteClass.py为:from .BaseClass import BaseClass。
最后一个警告,如果在原始代码中您将切换位置导入__init__.py,则它看起来像:
from .BaseClass import BaseClass
from .ConcreteClass import ConcreteClass
Run Code Online (Sandbox Code Playgroud)
初始代码可以工作,但您确实不希望任何人编写依赖于导入顺序的代码。如果有人更改顺序或应用isort工具来组织导入,祝你好运修复这些错误。
小智 5
类名和包含此类的文件的命名约定存在差异。这种误解可能来自像 java 这样的语言,其中每个类都有一个文件是很常见的。
在 python 中,每个模块可以有多个类(一个简单的 .py 文件)。应根据类命名约定调用此模块/文件中的类:类名称通常应使用 CapWords 约定。包含此类的文件应遵循模块命名约定:模块应具有简短的全小写名称。如果可以提高可读性,可以在模块名称中使用下划线。
=> CamelCase 应该在文件camelcase.py(或camel_case.py,如果需要)
| 归档时间: |
|
| 查看次数: |
24942 次 |
| 最近记录: |