12

次の Python モジュールの抜粋を検討してください。

foo.py:

class Foo:
  (...)

bar.py:

import foo

foo = foo.Foo()

モジュール オブジェクトであった変数 foo は、Foo オブジェクトで上書きされます。

オブジェクトに他の名前を使用できることはわかっています。たとえば、次のようになります。

foobar = foo.Foo()

しかし、それが唯一のインスタンスになるため、私のコードでは foo と呼ぶ方が意味的には理にかなっています。

(クラスを削除してモジュールのみを使用することでこれを回避しようとしましたが、モジュールのみを使用すると「堅牢性」の問題があったため、クラスの使用に戻りました。)

これは一種の哲学的な質問ですが、この潜在的なオブジェクト/モジュール名の競合を処理する「正しい」方法は何ですか?

4

3 に答える 3

8

私の意見では、あなたが現在行っていることに問題はありませんが、コードを読んでいるすべての人にとってより明確にするために、コードを次のように変更することをお勧めします。

import foo as foo_mod

foo = foo_mod.Foo()

または、次のようにします。

from foo import Foo

foo = Foo()

これにより、名前の衝突が防止されるためfoo、モジュール内の変数が同じ名前のモジュールを参照しないことがより明確になります。

于 2013-04-03T23:14:11.577 に答える