Pythonで、親クラスでimportしたパッケージを子クラスから使うことはできないか?
ご覧いただきありがとうございます。
頻繁に使うパッケージやモジュールをいちいち子クラスでimportせずに、親クラスでimportするだけで子クラスでも使うには次のソースコードをどう修正したらよいか教えていただきたいです。
背景
私がDjangoで開発しているプロジェクトでは、csvやreなどのパッケージの使用頻度が多いです。
子クラスでいちいちimportするのが面倒なので、それなら親クラスでimportすれば子クラスでも使えるかな?と思い小さなプロジェクトで試してみました。ですが下記エラーが出てしまいパッケージをimportすることができず困っています。
コードの流れ
run.pyでAnswerクラスのexecメソッドを呼び出しています。
AnswerクラスはModelBaseクラスを継承していて、ModelBaseクラスではcsvパッケージをimportしています。
execメソッドではcsvパッケージを使っていますがcsvパッケージが見つからずエラーになっています。ちなみにcsvファイルのファイルパスが空文字なのは気にしないでください。
実行時のエラー
$ python run.py
Traceback (most recent call last):
File "run.py", line 4, in <module>
answer.exec()
File "/path/to/dir/polls/models/answer.py", line 5, in exec
csv.read('')
NameError: name 'csv' is not defined
ソースコード
ディレクトリ構造
$ tree .
.
├── polls
│ └── models
│ ├── __init__.py
│ ├── answer.py
│ └── base.py
└── run.py
run.py
from polls.models import Answer
answer = Answer()
answer.exec()
polls/models/init.py
from .answer import Answer
polls/models/base.py
import csv
class ModelBase:
pass
polls/models/answer.py
from .base import ModelBase
class Answer(ModelBase):
def exec(self):
csv.read('')
print('Answer exec')
環境
- macOS Mojave 10.14.3
- Python 3.7.0