0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】パッケージからクラスをimportする。モジュール名は省略可能

Last updated at Posted at 2022-02-03

概要

Pythonのパッケージとモジュールのimportの方法に関してようやく腑に落ちたのでメモ。

例:scikit-learnの graph_lasso_モジュールのGraphicalLassoクラスをimportする

sklearn/covariance/graph_lasso_.py 内にGraphicalLassoクラスが定義されています。

今回の例において、各オブジェクトの名称は以下のように解釈できます。

sklearn: パッケージ <- ディレクトリであり、__init__.pyが存在するため
covariance: パッケージ <- ディレクトリであり、__init__.pyが存在するため
graph_lasso_: モジュール <- graph_lasso_.py という名のファイルが存在する
GraphicalLasso: クラス <- graph_lasso_.py 内で定義されている。

試したこと

下記の①と②を比較してみましょう。
パッケージからモジュールをインポートせず、直接クラスなどのオブジェクトをimportすることが可能であることがわかります。
具体的には下記の②が該当します。②においてはgraph_lasso_(.py)を呼び出さずに直接GraphicalLassoクラスのオブジェクトをimportしています。


# $ python3
Python 3.6.1 (default, Jul 13 2017, 17:01:43)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
#  ①パッケージからモジュール(.py)をインポートし、その後クラスをインポートする。
>>> from sklearn.covariance import graph_lasso_
>>> graph_lasso_.GraphicalLasso()
GraphicalLasso(alpha=0.01, assume_centered=False, enet_tol=0.0001,
        max_iter=100, mode='cd', tol=0.0001, verbose=False)
# ②パッケージから直接クラスをインポートする。
# (モジュールのインポートを明示的に行わなくても良い。)
>>> from sklearn.covariance import GraphicalLasso
>>> GraphicalLasso()
GraphicalLasso(alpha=0.01, assume_centered=False, enet_tol=0.0001,
        max_iter=100, mode='cd', tol=0.0001, verbose=False)
>>>

もちろん①のようにモジュール名を指定してimportすることも可能です。しかし、②のように予め使用するメソッドをソースの上部付近でimportするほうが、記述するコードが少なくスコープを狭めてインポートすることができるメリットがあります。その結果、ソースコードの可読性が高くなると思われます。(個人の意見です)

最後に

実際のコードでは①と②が入り交じって書かれることが多く正しく理解しないままであったのでまとめてみました。
以上です。

0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?