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,在这种情况下总是有另一个引用并且它们不会被删除。