PEP 8 - 例如模块名称与变量名称
PEP 8 - Module name vs variable name for instance
假设我有一个 Python 模块 my_class.py
(see PEP 8 convention for modules) that holds a class MyClass
(see PEP 8 convention for classes).
现在我想在同一个包的模块中实例化 class,通常会这样做
from .my_class import MyClass
my_class = MyClass()
因为 PEP 8 为实例变量名称提出了这种命名方案 here。
但是,在这种情况下,my_class
已经引用了模块 my_class.py
,因此实例变量会影响模块。
PEP 8 或任何其他来源是否给出了关于如何在此处进行的任何指导,还是仅由开发人员为变量想一个不同但不太直观的名称?
在您的示例中,您已明确导入 MyClass
。
虽然模块 my_class
被导入,但它不会在您的本地范围内分配一个变量,因此您不会通过为您的 MyClass
实例使用 my_class
来隐藏它。
更新
在同一个包中导入模块时,看起来像是将引用添加到本地范围,但是,使用相同的名称没有风险。 Python 中的变量是对对象而不是对象的引用。
当您重新分配一个引用(例如使用另一个对象的名称)时,如果没有其他引用 对象将被删除。在模块的情况下,它们在导入时被添加到 sys.modules
,在这种情况下总是有另一个引用并且它们不会被删除。
假设我有一个 Python 模块 my_class.py
(see PEP 8 convention for modules) that holds a class MyClass
(see PEP 8 convention for classes).
现在我想在同一个包的模块中实例化 class,通常会这样做
from .my_class import MyClass
my_class = MyClass()
因为 PEP 8 为实例变量名称提出了这种命名方案 here。
但是,在这种情况下,my_class
已经引用了模块 my_class.py
,因此实例变量会影响模块。
PEP 8 或任何其他来源是否给出了关于如何在此处进行的任何指导,还是仅由开发人员为变量想一个不同但不太直观的名称?
在您的示例中,您已明确导入 MyClass
。
虽然模块 my_class
被导入,但它不会在您的本地范围内分配一个变量,因此您不会通过为您的 MyClass
实例使用 my_class
来隐藏它。
更新
在同一个包中导入模块时,看起来像是将引用添加到本地范围,但是,使用相同的名称没有风险。 Python 中的变量是对对象而不是对象的引用。
当您重新分配一个引用(例如使用另一个对象的名称)时,如果没有其他引用 对象将被删除。在模块的情况下,它们在导入时被添加到 sys.modules
,在这种情况下总是有另一个引用并且它们不会被删除。