ご覧いただきありがとうございます。
頻繁に使うパッケージやモジュールをいちいち子クラスで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