Python模块和对象名称冲突

Joã*_*lva 6 python naming-conventions name-clash

请考虑以下Python模块摘录:

foo.py:

class Foo:
  (...)
Run Code Online (Sandbox Code Playgroud)

bar.py:

import foo

foo = foo.Foo()
Run Code Online (Sandbox Code Playgroud)

变量foo是一个模块对象,用Foo对象覆盖.

我知道我可以使用其他名称作为对象,例如:

foobar = foo.Foo()
Run Code Online (Sandbox Code Playgroud)

但从语义上来说,在我的代码中将它称为foo更有意义,因为它将是唯一的实例.

(我试图通过删除类和仅使用模块来解决这个问题,但我回到使用类,因为使用模块只有"健壮性"问题.)

这是一个哲学问题,但处理这个潜在对象/模块名称冲突的"正确"方法是什么?

And*_*ark 6

在我看来,你目前正在做的事情没有任何问题,但为了让每个人都能更清楚地阅读代码,我建议你将代码更改为以下内容:

import foo as foo_mod

foo = foo_mod.Foo()
Run Code Online (Sandbox Code Playgroud)

或者:

from foo import Foo

foo = Foo()
Run Code Online (Sandbox Code Playgroud)

这可以防止名称冲突,因此更明显的是foo模块中的变量不会引用同名模块.