pythonにおいて
A.pyには classを定義し、
そのファイルの下部に、そのクラスを実行するための
class のインスタンス化とインスタンスのメソッドを記述し
B.pyには classを定義せずに
変数に、値が増えたり減ったりすることのない
dictを定義して、A.pyのクラスから
定数のように参照したいのですが、
パソコンのファイルシステム内でのファイルの配置、
といいますか、それらのファイルは同じフォルダに
置いておくものなのでしょうか?
それと、pythonにおける「モジュール」というのは、
pythonスクリプトファイルのことでしょうか?
↓
Python で `A.py` から
`B.py` の `dict` を参照する方法について説明します。
### ファイルの配置
`A.py` から `B.py` をインポートする場合、
基本的には**同じフォルダ内**に配置するのが最も簡単です。
例えば、次のような構成にすると、
`A.py` から `B.py` を直接インポートできます。
```
/project-folder
├── A.py
├── B.py
```
この場合、`A.py` から `B.py` をインポートするには、
単に `import B` または `from B import 定数名`
を記述すればOKです。
---
### `B.py` の内容(定数として `dict` を定義)
`B.py` では、変数に辞書(`dict`)を定義し、
それを `A.py` からインポートできるようにします。
```python
# B.py
MY_CONSTANTS = {
"apple": 1,
"banana": 2,
"cherry": 3
}
```
---
### `A.py` で `B.py` を参照する
`A.py` のクラス内で `B.py` の `MY_CONSTANTS` を使用できます。
```python
# A.py
import B # B.py をインポートする
class MyClass:
def print_constants(self):
# B.py の定数を参照
print(B.MY_CONSTANTS)
# クラスのインスタンス化とメソッド実行
if __name__ == "__main__":
obj = MyClass()
obj.print_constants()
```
---
### `python` における「モジュール」とは?
Python では、「モジュール(module)」とは
**Python のスクリプトファイル
(拡張子 `.py` のファイル)**のことを指します。
つまり、`B.py` もモジュールであり、
`import B` によってその内容を `A.py` で利用できます。
---
### 補足:異なるフォルダに配置する場合
もし `A.py` と `B.py` を異なるフォルダに配置したい場合は、
適切に `sys.path` を変更するか、
`PYTHONPATH` を設定する必要があります。
例えば、以下のような構成の場合:
```
/project-folder
├── main.py # 実行スクリプト
├── module/
│ ├── __init__.py # 空でもOK(パッケージとして認識)
│ ├── A.py
│ ├── B.py
```
`main.py` から `A.py` を実行しつつ
`B.py` を参照するには、
以下のように `module` をパッケージとしてインポートできます。
```python
# main.py
from module.A import MyClass
obj = MyClass()
obj.print_constants()
```
このように `module/` の中に `__init__.py` を作成すれば、
`module` は Python の**パッケージ**として認識され、
`from module import B` のようなインポートが可能になります。
---
### まとめ
- **A.py と B.py は同じフォルダに置くのが簡単。**
- **B.py をインポートして、辞書を A.py で参照できる。**
- **「モジュール」とは Python スクリプト(`.py` ファイル)のこと。**
- **異なるフォルダに分けるなら
`__init__.py` を使ってパッケージ化できる。**
この方法でうまく動作するか試してみてください! 😊
コメント
コメントを投稿