0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

import時にモジュール名やクラス名でのアンダースコアを合計2つ使用することに関する注意点

Last updated at Posted at 2024-10-23

概要

from my_projec_t.utils import function

のようなアンダーバーを2つ使った名前のフォルダ(親ディレクトリ)からインポートしようとするとエラーが発生したのでメモにまとめました。


問題の原因

Pythonでは、モジュール名やクラス名を定義する際にアンダースコア(_)を使用することがありますが、特にアンダースコアを2つ使用することには注意が必要です。以下にその理由をまとめます。

  1. 名前マングリングの影響
    アンダースコアを2つ使用する名前は、Pythonの名前マングリングの対象となります。この機能は、クラス内部で定義されたメソッドや属性名に特別な処理を施し、外部からアクセスできなくするものです。例えば、__my_variableという名前は、実際には_ClassName__my_variableとして扱われるため、外部からのアクセスが難しくなります。
  2. 特殊なシステムレベルの解釈
    アンダースコア2つで始まり、かつ2つで終わる名前(例:__name__)は、Pythonの特別なシステム変数やメソッドを示すために予約されています。これらの名前は、Python内部で特別な処理を受けるため、開発者が独自に定義することは推奨されません。
  3. モジュールのインポートエラー
    アンダースコアを2つ使用すると、名前解決の際に意図したモジュールやクラスが正しくインポートできないことがあります。これにより、ModuleNotFoundErrorなどのエラーが発生し、プログラムの実行に支障をきたす可能性があります。

推奨事項

モジュール名やクラス名では、アンダースコアを1つだけ使用するか、アンダースコアを使わずに意味のある名前を付けることを推奨します。

  • 成功例: my_project(アンダースコア1つ)
  • 失敗例: my__project(アンダースコア2つ)

このルールを守ることで、Pythonの名前解決の問題や不具合を避けることができます。適切な命名規則を用いることは、コードの可読性や保守性を高める上でも重要です。

補足

その他のパターンとしては

#エラーなし
from my_project.utils import function

#エラーなし
from myproject.u_til_s import function

だったので、最初のフォルダ名の部分のみ、アンダーバーを合計2つ使わないことを意識すれば良いと思われました。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?