質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8999閲覧

大きくなってきたクラスをファイル分割したい

murmur1975

総合スコア34

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/11/15 07:37

やっていること

ある実験に関して、データ読み込みから、処理選択、前処理、計算、グラフ表示をさせています。

python

1class experiment(self): 2 3 def __init__(): 4 # ファイルからデータ読み込みなど(全インスタンス共通)...(A) 5 self.db = pd.read_csv('filename')) 6 # 変数など(各インスタンスごとに別々) 7 self.val = val 8 9 def control(): 10 # (1) インターフェイスなど 11 12 def preprocess(): 13 # (2) 前処理など 14 15 def calc(): 16 # (3) 計算処理など 17 18 def graph(): 19 # (4) 結果の表示など

困っていること

  1. インスタンス生成ごとに(A)の処理をするので時間がかかるが、この処理は全インスタンスで共通なので、1回にしたい。
  2. (2),(3),(4)を構成するメソッド群が増えてきたので、ファイル分割したいと考えているが、別のクラスから__init__()で読み込んだデータにどうやってアクセスしたらよいか、判然としない。読み込むだけのクラスを作ったほうがいいのか、それを前処理クラスに渡すには、前処理クラスの引数として渡せばいいのか、などなど、大まかな設計がわからずに手が止まっている。

教えてほしいこと

  1. インスタンスを2個以上作る場合、__init__()内のファイルの読み込み部だけを1回だけにするには、どのような方法をとったらよいか。
  2. 上のようなケースでファイルを分割するなら、どのような構成(クラス、ファイル、ディレクトリ)をとって連携したらよいか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1class Base: 2 # 1. 全インスタンス共通なのでクラス変数に変更 3 # でも、今まで通りにself.dbでアクセス可能 4 db = pd.read_csv('filename')) 5 6 def __init__(self): 7 # 変数など(各インスタンスごとに別々) 8 self.val = val 9 10class ControlMixin: 11 def control(self): 12 # (1) インターフェイスなど 13 14class PreProcessMixin: 15 def preprocess(self): 16 # (2) 前処理など 17 18class CalcMixin: 19 def calc(self): 20 # (3) 計算処理など 21 22class GraphMixin: 23 def graph(self): 24 # (4) 結果の表示など 25 26class experiment(Base, ControlMixin, PreProcessMixin, CalcMixin, GraphMixin): 27 # 2. XxxMixinというクラスに処理を分割して多重継承で結合するパターン 28 pass

投稿2018/11/15 09:39

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murmur1975

2018/11/16 03:23

たびたび教えてくださってありがとうございます。なるほど、こういう風に分割するんですね。やってみてまたわからないことがあれば、質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問