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

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

新規登録して質問してみよう
ただいま回答率
85.50%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

2回答

1381閲覧

Python クラスの継承を使用して、処理を行いたいです。

oobutamaru

総合スコア32

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2021/10/25 02:19

前提・実現したいこと

クラスの継承を使用して、処理を行いたいです。
子クラスの処理を実行した後、親クラスの処理をしたいですが、どのように記述すればよいかわかりませんので
ご教示頂けると幸いです。

発生している問題・エラーメッセージ

python

1class Test(object): 2 def __init__(self,data): 3 self.data = data 4 self.pre() 5 def pre(self): 6 ''' 7 親クラスの関数の処理 8 ''' 9class Test2(Test): 10 def __init__(self,data): 11 super(Test2,self).__init__(data): 12 self.func() 13 def func(self): 14     ''' 15   子クラスの関数の処理 16  '''

コードはこんな感じで、親クラスの定義した関数を子クラスで使用したいですが、
子クラスの関数を実行してから、親クラスの関数を実行したいです。
全て、初期化の段階で実行したいです。
superの前に子クラスの処理を書けばよいかな?とも思いましたが、うまくいきませんでした。
ご教示頂けると幸いです。
よろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

superによる親クラスのメソッド(以下:親メソッド)呼び出しは、当然ながら親メソッドの全処理を実行してから後続処理に進みます。
そのため、superを使いたい場合は、子クラスのメソッド(以下:子メソッド)内で処理順が上位の処理を先に実行するしかありません。

python

1class Test2(Test): 2 def __init__(self,data): 3 self.func() 4 super(Test2,self).__init__(data)

ただし、このfuncが「self.dataに値が存在すること」を前提に定義しているならば、処理はもちろん失敗します。
なぜなら、親メソッドの処理が未実施のためにself.dataには何も存在しないためです。

コード例

※以下の例は、__init__内で処理をおさめることを前提とした回答です。

親メソッドをベタ移植後、順番調整する

どうしても、__init__で完結させたいのであれば、親メソッドの内容を子メソッドに移植した上で処理順を調整する必要があります。

python

1class Test2(Test): 2 def __init__(self,data): 3 self.data = data 4 self.func() 5 self.pre()

事前に親クラスに子メソッド割り込み用のメソッドを定義しておく

以下のように、child_funcなどといった「子クラスでself.pre()より先になにかさせたいときに呼ばれるメソッド」を事前定義しておき、小クラスでオーバーライドすることで実現できます。

python

1class Test2(Test): 2 def __init__(self,data): 3 self.data = data 4 self.child_func() 5 self.pre() 6 7 def child_func(self): 8 """小クラスによる割り込みを想定したメソッド。親では何もしない""" 9 pass 10 11class Test2(Test): 12 def child_func(self): 13 """funcで定義していた処理"""

投稿2021/10/25 03:09

attakei

総合スコア2738

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

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

oobutamaru

2021/10/25 03:54

回答ありがとうございます。 そうなのですね。勉強不足でした。 親クラスでdataframe全体の文字の置換をし、それを継承して、子クラスで、それぞれのdataframeに適応させようとしていましたが、 順番にやると何故か置換できていない文字がでてきました。処理の順番を変えるとできたので、そういう形で継承できればと思いましたが、仕方ないですね。 置換の方法がうまくできていないかもしれないので、見直してみます。 ご丁寧に回答ありがとうございました。
guest

0

こういう感じです。

python

1class Test(object): 2 def __init__(self,data): 3 self.data = data 4 self.func() 5 self.pre() 6 def pre(self): 7 print('親のpre') 8 def func(self): 9 pass 10 11class Test2(Test): 12 def __init__(self,data): 13 super(Test2,self).__init__(data) 14 def func(self): 15 print('子のfunc')

実行結果

python

1>>> t = Test2(5) 2子のfunc 3親のpre 4>>> print(t.data) 55

投稿2021/10/25 02:56

ppaul

総合スコア24666

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

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

oobutamaru

2021/10/25 03:58

回答ありがとうございます。 上記の形で考えてやってみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問