helloworld-yoppy
@helloworld-yoppy (Yoppy land)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

retrun selfは必要なのか?

質問内容

return selfの必要性について質問をしたいです。

オープンソースを見ているとクラス内の関数の最後に「return self」と設定しているコードが多々あります。
しかし、return selfを記述しないくてもself内の変数の値が受け継がれているようなので、return selfは必要ないのでは、ないでしょうか?

return selfが記述されている理由についてお聞きしたいです。

よろしくお願いいたします。

class sample:
    def __init__(self):
        self.hello()
        print(f"hoge:{self.hoge}")
        print(f"hogehoge:{self.hogehoge}")

    def hello(self):
        self.hoge = 1
        self.hogehoge = 1
        return self

    def hello2(self):
        print(f"hoge:{self.hoge + 1}")
        print(f"hogehoge:{self.hogehoge + 1}")
        return self


s = sample()
s.hello2()


=>hoge1
=>hogehoge1
=>hoge2
=>hogehoge2
class sample:
    def __init__(self):
        self.hello()
        print(f"hoge:{self.hoge}")
        print(f"hogehoge:{self.hogehoge}")

    def hello(self):
        self.hoge = 1
        self.hogehoge = 1

    def hello2(self):
        print(f"hoge:{self.hoge + 1}")
        print(f"hogehoge:{self.hogehoge + 1}")


s = sample()
s.hello2()

=>hoge1
=>hogehoge1
=>hoge2
=>hogehoge2
1

1Answer

おそらくメソッドチェーンが出来るようにするためだと思います。
メソッドチェーンというのは次のような書き方です。

object.aaa().bbb().ccc()

記載されているコードだと次のような書き方が可能です。

s = sample()
s.hello().hello2()

hello()selfを返すので、次はself.hello2()と解釈されます。
selfにはhello2()があるので、これは正しく実行されます。

2Like

Comments

  1. 回答していただきありがとうございます!
    理解できました(>人<;)

Your answer might help someone💌