【Pythonプログラミング】staticメソッド・classメソッドを解説!クラスをもっと理解しよう!〜 初心者向け 〜

Поделиться
HTML-код
  • Опубликовано: 26 авг 2024

Комментарии • 29

  • @orangebananaaaa
    @orangebananaaaa Год назад

    めちゃくちゃ分かりやすい!
    疑問点も同時に解説してくれるのありがたい

    • @pythonvtuber9917
      @pythonvtuber9917  Год назад

      ありがとうございます!そう言っていただけて嬉しいです!

  • @PhD-genki
    @PhD-genki 2 года назад +1

    いつも勉強させていただいてます。大学で教えてますが、今回のお話はとても役に立ちました。
    先日のロードマップのような話は、大学ではそこまでは扱わないのですが(アルゴリズムとかの話の方が中心なので)、今回のようなPythonの基礎の話(であるが、深いところ)は、とても参考になります。
    ありがとうございます。

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад +1

      ご視聴いただきありがとうございます😊
      大学ではアルゴリズムが中心なんですね!!すごいです!!このチャンネルではPythonの仕様に関することやライブラリの使い方がメインになりますが、少しでもお役に立てていたら嬉しいです✨

  • @me-me-661
    @me-me-661 2 года назад

    クラスメソッド、普通のクラスに書かれてるメソッドのことかと思ってました…ありがとうございます。
    スタティックメソッドは、ずっと「このオブジェクト自身を扱うメソッドなのに分けるのはなんだかなー」と思ってたので、今度使ってみたいと思います。

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад

      ご視聴いただきありがとうございます!
      クラスメソッド、スタティックメソッド、ちょっと言葉自体が抽象的で分かりにくいですよね😵
      ぜひ、今後使えるシーンで使ってみてください!

  • @re9236
    @re9236 Год назад

    疑問が解決した🎉

  • @user-oj1sz8ol5j
    @user-oj1sz8ol5j Год назад

    動画拝見させてもらいました、動画の主旨とは少しズレるんですが、datetimeが、ライブラリ名やメソッド名?に使われてるのはクラスメソッドが関係してるんだという事が今回わかって良かったです。
    Pythonで、date型のデータを処理したり日時を比較するコードを書く時に手こずったことがあり、その辺機会があれば動画にしてもらえたら嬉しいです。

  • @kurukuruteh
    @kurukuruteh 2 года назад

    あまり深掘りした事がなかった二つなので勉強になりました
    たまにライブラリのソースコードを見た時も @ がいっぱいあるなぁくらいだったので😇

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад

      ご視聴いただきありがとうございます😊
      ライブラリのコード見ると、確かにデコレータがよく使われているイメージはあるかもですね!今後、staticmethod, classmethodを見かけた時は、ぜひ今回の内容を思い出してみてください😉

  • @MikuHatsune-np4dj
    @MikuHatsune-np4dj 2 года назад

    インスタンス変数ではなくクラス変数にアクセスしたいときにも使いますね。

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад +1

      コメントありがとうございます😊

  • @at-sx4cr
    @at-sx4cr 6 месяцев назад

    仕事の現場で
    インスタンスを作らない
    クラスメソッドの使い方を
    してるのに
    @classmethodのデコレータ
    第一引数に、clsを渡すなど
    してない書き方をしてる
    現場がありましたが
    この書き方は問題無いのでしょうか?

  • @ivancamiloarandac.2998
    @ivancamiloarandac.2998 2 года назад

    Nice video!!

  • @tsubasa_km
    @tsubasa_km 2 года назад

    継承することの無いクラスを使う時はクラスメソッド使う必要ないって感じですかね?でもせっかくだから使った方がいいのかも?
    よくわかんないけど覚えることいっぱいで大変ですね笑

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад +3

      ご質問ありがとうございます😊
      そうですね、個人的にはクラスメソッドは使わなくて良いのではないかな?と思っています。これらは使う頻度は低いのですが、ライブラリを読みたい時や他の人のコードで出た時に、あれか!ぐらいには理解しておいた方が良いかな〜と思ってご紹介しました😉

  • @asatosi69
    @asatosi69 2 года назад

    スタテックメソッドの説明で登場するラムダ式について質問させてください。
    以下のような記述のソートは理解できるのですが
    sorted(l, key=lambda x: x[1]) ※2文字目でソート
    sorted(l, key=lambda x: len(x)) ※文字列の長さでソート
    sorted(books, key=lambda x: x.price)
    で価格順に並ぶのかが理解できません。
    「.price」はメソッドではないと思うのですが、なぜ、このような記述となっているのでしょうか?
    慣例的なものでしょうか?

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад

      ご質問ありがとうございます!
      「.price」はインスタンス変数にアクセスしているんですね!
      クラスの解説動画の7:03あたりからインスタンス変数へのアクセスについて解説してるので、よければ見てみてください😉 ▶︎ ruclips.net/video/XMDWpPZkRCc/видео.html

    • @asatosi69
      @asatosi69 2 года назад

      返信ありがとうございます。
      「x.price」は処理を進める中で「book1.price」、 「book2.price」、「book3.price」が設定されていくということですね。
      そのため、「x.price」には順に「1320」、「1650」、「499」の値が格納されるので、比較できるのですね。
      承知いたしました。

  • @SakretteAmamiya
    @SakretteAmamiya 2 года назад

    staticメソッド知らなかった!!
    もしclsが必要ないならstaticメソッドでいいという感じ?

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад +1

      コメントありがとうございます✨
      おっしゃる通りclsが必要ないならstaticメソッドを使う感じですね😊

  • @user-yq6dd4qg4o
    @user-yq6dd4qg4o 2 года назад

    Numpyの回ではimport文でnpを使用することが習慣になっているとのことでした。
    また、本動画ではクラスメソッドにおいて引数にclsを用いるのが一般的とありました。
    このような、変数名や、メソッド名その他の習慣・慣例を教えていただきたいです

    • @pythonvtuber9917
      @pythonvtuber9917  2 года назад +5

      コメントありがとうございます😊
      習慣・慣例で使われている名前などをまとめた動画をご希望、ということですかね?
      検討してみますね😉

  • @asatosi69
    @asatosi69 Год назад

    こんにちは。いつも視聴させていただいています。
    継承時のクラスメソッドとスタティックメソッドの違いについて
    確認させてください。
    サブクラス&クラスメソッドの場合は、サブクラスのオブジェクトが生成される。
    サブクラス&スタティックメソッドの場合は、スーパークラスのオブジェクトが生成される
    という違いがあることが判りました。
    ですが、スタティックメソッド使用時にスーパークラスのオブジェクトが生成されることの
    デメリットがいまいち理解できていません。
    私が考えついたスーパークラスのオブジェクトが生成されることのデメリットは、サブクラスに
    新たにインスタンスメソッドを作成した際に、スーパークラスのオブジェクトからはアクセス
    できないからというものなのですが、合っていますでしょうか?認識違い、不足している点
    がございましたら、教えてください。
    動画の内容に当てはめれば、、サブクラス『Comic』に新たにメソッド『display_info2』を作成したとき
    クラスメソッドから作成したオブジェクトはメソッド『display_info2』を利用できるが、
    スタティックメソッドから作成したオブジェクトはメソッド『display_info2』を利用できない
    よろしくお願いいたします。

    • @pythonvtuber9917
      @pythonvtuber9917  Год назад

      ご質問ありがとうございます!
      「サブクラス&スタティックメソッドの場合は、スーパークラスのオブジェクトが生成される」の部分がちょっと私の認識と違うのですが、もしもそのように動くコードなどあればコメント欄に貼り付けていただけるとありがたいです。
      5:12あたりから話している通り、スタティックメソッドは基本的には外にある関数とあまり変わらないので、オブジェクトを作成するみたいなファクトリーメソッドとしての使い方は、クラスメソッド特有だと思っています!

    • @asatosi69
      @asatosi69 Год назад

      @@pythonvtuber9917
      返信ありがとうございます。
      私のコードは
      import json
      class Book:
      def __init__(self, title, author, price):
      self.title = title
      self.author = author
      self.price = price
      def display_info(self):
      print(f'タイトル: {self.title}
      '
      f'著者: {self.author}
      '
      f'価格: {self.price:,}円
      ')
      @classmethod
      def from_json(cls, book_json):
      book_dict = json.loads(book_json)
      return cls(
      book_dict['title'],
      book_dict['author'],
      book_dict['price']
      )
      @staticmethod
      def from_json2(book_json):
      book_dict = json.loads(book_json)
      return Book(
      book_dict['title'],
      book_dict['author'],
      book_dict['price']
      )
      class Comic(Book):
      def display_info2(self):
      print(f'タイトル: {self.title}
      '
      f'著者: {self.author}
      '
      f'価格: {self.price:,}円
      ')
      book_1 = Book.from_json(
      '{"title": "はらぺこあおむし", "author": "エリック・カール", "price": 1320}'
      )
      book_1.display_info()
      comic_1 = Comic.from_json(
      '{"title": "はらぺこあおむし", "author": "エリック・カール", "price": 1320}'
      )
      print(type(comic_1))
      comic_1.display_info2()
      print(type(comic_1))
      comic_2 = Comic.from_json2(
      '{"title": "はらぺこあおむし", "author": "エリック・カール", "price": 1320}'
      )
      print(type(comic_2))
      comic_2.display_info2()
      です。
      print(type(comic_1))の実行結果が『』でしたので、サブクラスのオブジェクトが生成される、
      print(type(comic_2))の実行結果が『』でしたので、スーパークラスのオブジェクトが生成される
      と表現しました。
      色々な用語で出てきて、状態を正しく表せていませんでしたら、申し訳ございません。

    • @pythonvtuber9917
      @pythonvtuber9917  Год назад

      コードを貼り付けてくださったコメントが、なぜか消えてしまったので(RUclipsのスパムに引っ掛かったのかも..??)こちらにご返答を記載させていただきます。コードありがとうございます。
      from_json2を呼び出すと、Comicのスーパークラス(Book)に記載された「from_json2」が動きますね。こちらは「return Book(xxx, yyy, zzz)」となっているのでBookオブジェクトが返ってきますね。ここが例えば別のクラス「User(xxx, yyy, zzz)」 ならUserオブジェクトが生成されるので、「スーパークラスが生成される」というより「コード上に記載されているクラスが生成される」ということですね!(今回のコードでは結果は同じですがスーパー・親という意味は持たないという意図です。)
      ご質問の本題である「スーパークラスのオブジェクトが生成されることの
      デメリット」ですが、デメリットは特になくて、どちらかというと、「具体的なクラスであるサブクラスのオブジェクトが作れると嬉しいよね!便利だよね!」というイメージですね。

    • @asatosi69
      @asatosi69 Год назад

      @@pythonvtuber9917
      返信ありがとうございました。
      >>「スーパークラスが生成される」というより「コード上に記載されているクラスが生成される」ということですね!
      結果的には同じですが、認識がズレていました汗汗
      (問題の本質)理解が進みました。
      また、何かございましたら、質問させてください。ありがとうございました。