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

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

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

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

Q&A

解決済

1回答

988閲覧

クラス メソッドの中にメソッドを作る方法 Class.method1.method1-1()のように呼び出したい

kt19906

総合スコア47

Python

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

0グッド

0クリップ

投稿2021/10/17 06:42

pytonのクラスでメソッドの中にメソッドを入れたいです.

python

1class Sample(): 2 def method1(self): 3 return 1 4 def method2(self): 5 return 2 6 def method3(self): 7 return 3 8 def method4(self): 9 return 4 10 def method5(self): 11 return 5 12sample = Sample(self)

クラスのメソッドが多くなると可読性が悪くなるので,メソッドの中にメソッドを作って
sample.method1.method11()のような形で使えるようにしたいのですが,どうすれば
できますか?

単純に入れ子構造にしたら関数として処理されてメソッド内でしか使うことができなくて困っています

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

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

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

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

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

ppaul

2021/10/17 06:53

気になるのは、クラス定義の可読性ですか、それともインスタンスからのメソッド呼び出しの可読性ですか?
kt19906

2021/10/17 07:03

インスタンスからのメソッドの可読性です あとは,クラスを編集している間も,行数が長くなるとどこにメソッドを書いたかわかりにくくなるので
kt19906

2021/10/17 07:06

例えば,円と線を描くメソッドを作るときに fig.circle.draw()とfig.line.draw()のようにできれば便利かなと思っています.
guest

回答1

0

ベストアンサー

もしかして、やりたいことって、VBAでいう Sheets(1).Cells(1,1).Value 、
JavaScript でいう DOM操作のようになんか伸びていくタイプでしょうか。

それなら私も似たような質問をした気がします。

簡単に言えば、『オブジェクトを返せばいい』です。

例えば VBAの Sheets(1).Cells(1,1).Value みたいなのを再現するとしたら、

SheetsクラスのCellsメソッドを用意する。
そのメソッドは Cellオブジェクトを返す。

つまり、イメージ的には、

sheet = Sheets( 1 ) cell = sheet.Cells( 1, 1 ) cell,Value = “test”

のように、AのオブジェクトがBオブジェクトを返し、BオブジェクトがCオブジェクトを返す。
とするのです。

class C: # 処理 def method1(): return 100 class B: # Cのオブジェクトを返す def CreateC(): return C() class A: # Bのオブジェクトを返す def CreateB(): return B() a = A() n = a.CreateB().CreateC().method1() ``` のようにやるとか。 それか、いわゆる**関数型**プログラミングっていうやつでやるかでしょうね。 こっちの方はよくわかりませんが。 ---- [追記1] 上の処理の名前なんて言ったかな…鎖のように繋がっているからチェーンメソッドかなと思い、 調べてみました。 ああ、言い忘れていましたが、チェーンメソッドでも、『自身のオブジェクトを使う』のであれば、selfを使えば良さそうです。 ヒント: [参考1](https://plumfield56.com/python/method-chaining/) どちらにしても、チェーンメソッドをやる場合は上記の『別のクラスのオブジェクトを返しながらやる』的なものっですね。単に自身(self)を返すのか、他のクラスのオブジェクトを返すのかぐらいの違いですね。 (厳密には違うとは思うが)

投稿2021/10/17 07:39

編集2021/10/17 08:06
BeatStar

総合スコア4958

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

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

BeatStar

2021/10/17 07:40

ただ、このやり方でなんでもいいのかと言われると疑問ですが。
kt19906

2021/10/17 07:53

やりたいことはまさしくそういうことです!! でも,やはりクラスを複数用意する方法しかないんですね pythonの標準的な書きかたで何かあるかと思ってました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問