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

  Рет қаралды 19,975

Pythonプログラミング VTuber サプー

Pythonプログラミング VTuber サプー

Күн бұрын

Пікірлер: 29
@PhD-genki
@PhD-genki 2 жыл бұрын
いつも勉強させていただいてます。大学で教えてますが、今回のお話はとても役に立ちました。 先日のロードマップのような話は、大学ではそこまでは扱わないのですが(アルゴリズムとかの話の方が中心なので)、今回のようなPythonの基礎の話(であるが、深いところ)は、とても参考になります。 ありがとうございます。
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご視聴いただきありがとうございます😊 大学ではアルゴリズムが中心なんですね!!すごいです!!このチャンネルではPythonの仕様に関することやライブラリの使い方がメインになりますが、少しでもお役に立てていたら嬉しいです✨
@at-sx4cr
@at-sx4cr 7 ай бұрын
仕事の現場で インスタンスを作らない クラスメソッドの使い方を してるのに @classmethodのデコレータ 第一引数に、clsを渡すなど してない書き方をしてる 現場がありましたが この書き方は問題無いのでしょうか?
@嵐を呼ぶバヌシオー
@嵐を呼ぶバヌシオー Жыл бұрын
動画拝見させてもらいました、動画の主旨とは少しズレるんですが、datetimeが、ライブラリ名やメソッド名?に使われてるのはクラスメソッドが関係してるんだという事が今回わかって良かったです。 Pythonで、date型のデータを処理したり日時を比較するコードを書く時に手こずったことがあり、その辺機会があれば動画にしてもらえたら嬉しいです。
@tsubasa_km
@tsubasa_km 2 жыл бұрын
継承することの無いクラスを使う時はクラスメソッド使う必要ないって感じですかね?でもせっかくだから使った方がいいのかも? よくわかんないけど覚えることいっぱいで大変ですね笑
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご質問ありがとうございます😊 そうですね、個人的にはクラスメソッドは使わなくて良いのではないかな?と思っています。これらは使う頻度は低いのですが、ライブラリを読みたい時や他の人のコードで出た時に、あれか!ぐらいには理解しておいた方が良いかな〜と思ってご紹介しました😉
@me-me-661
@me-me-661 2 жыл бұрын
クラスメソッド、普通のクラスに書かれてるメソッドのことかと思ってました…ありがとうございます。 スタティックメソッドは、ずっと「このオブジェクト自身を扱うメソッドなのに分けるのはなんだかなー」と思ってたので、今度使ってみたいと思います。
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご視聴いただきありがとうございます! クラスメソッド、スタティックメソッド、ちょっと言葉自体が抽象的で分かりにくいですよね😵 ぜひ、今後使えるシーンで使ってみてください!
@SakretteAmamiya
@SakretteAmamiya 2 жыл бұрын
staticメソッド知らなかった!! もしclsが必要ないならstaticメソッドでいいという感じ?
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
コメントありがとうございます✨ おっしゃる通りclsが必要ないならstaticメソッドを使う感じですね😊
@kurukuruteh
@kurukuruteh 2 жыл бұрын
あまり深掘りした事がなかった二つなので勉強になりました たまにライブラリのソースコードを見た時も @ がいっぱいあるなぁくらいだったので😇
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご視聴いただきありがとうございます😊 ライブラリのコード見ると、確かにデコレータがよく使われているイメージはあるかもですね!今後、staticmethod, classmethodを見かけた時は、ぜひ今回の内容を思い出してみてください😉
@re9236
@re9236 Жыл бұрын
疑問が解決した🎉
@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あたりからインスタンス変数へのアクセスについて解説してるので、よければ見てみてください😉 ▶︎ kzbin.info/www/bejne/jn6niKOGj9CFecU
@asatosi69
@asatosi69 2 жыл бұрын
返信ありがとうございます。 「x.price」は処理を進める中で「book1.price」、 「book2.price」、「book3.price」が設定されていくということですね。 そのため、「x.price」には順に「1320」、「1650」、「499」の値が格納されるので、比較できるのですね。 承知いたしました。
@MikuHatsune-np4dj
@MikuHatsune-np4dj 2 жыл бұрын
インスタンス変数ではなくクラス変数にアクセスしたいときにも使いますね。
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
コメントありがとうございます😊
@orangebananaaaa
@orangebananaaaa 2 жыл бұрын
めちゃくちゃ分かりやすい! 疑問点も同時に解説してくれるのありがたい
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ありがとうございます!そう言っていただけて嬉しいです!
@asatosi69
@asatosi69 2 жыл бұрын
こんにちは。いつも視聴させていただいています。 継承時のクラスメソッドとスタティックメソッドの違いについて 確認させてください。 サブクラス&クラスメソッドの場合は、サブクラスのオブジェクトが生成される。 サブクラス&スタティックメソッドの場合は、スーパークラスのオブジェクトが生成される という違いがあることが判りました。 ですが、スタティックメソッド使用時にスーパークラスのオブジェクトが生成されることの デメリットがいまいち理解できていません。 私が考えついたスーパークラスのオブジェクトが生成されることのデメリットは、サブクラスに 新たにインスタンスメソッドを作成した際に、スーパークラスのオブジェクトからはアクセス できないからというものなのですが、合っていますでしょうか?認識違い、不足している点 がございましたら、教えてください。 動画の内容に当てはめれば、、サブクラス『Comic』に新たにメソッド『display_info2』を作成したとき クラスメソッドから作成したオブジェクトはメソッド『display_info2』を利用できるが、 スタティックメソッドから作成したオブジェクトはメソッド『display_info2』を利用できない よろしくお願いいたします。
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご質問ありがとうございます! 「サブクラス&スタティックメソッドの場合は、スーパークラスのオブジェクトが生成される」の部分がちょっと私の認識と違うのですが、もしもそのように動くコードなどあればコメント欄に貼り付けていただけるとありがたいです。 5:12あたりから話している通り、スタティックメソッドは基本的には外にある関数とあまり変わらないので、オブジェクトを作成するみたいなファクトリーメソッドとしての使い方は、クラスメソッド特有だと思っています!
@asatosi69
@asatosi69 2 жыл бұрын
@@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 2 жыл бұрын
コードを貼り付けてくださったコメントが、なぜか消えてしまったので(KZbinのスパムに引っ掛かったのかも..??)こちらにご返答を記載させていただきます。コードありがとうございます。 from_json2を呼び出すと、Comicのスーパークラス(Book)に記載された「from_json2」が動きますね。こちらは「return Book(xxx, yyy, zzz)」となっているのでBookオブジェクトが返ってきますね。ここが例えば別のクラス「User(xxx, yyy, zzz)」 ならUserオブジェクトが生成されるので、「スーパークラスが生成される」というより「コード上に記載されているクラスが生成される」ということですね!(今回のコードでは結果は同じですがスーパー・親という意味は持たないという意図です。) ご質問の本題である「スーパークラスのオブジェクトが生成されることの デメリット」ですが、デメリットは特になくて、どちらかというと、「具体的なクラスであるサブクラスのオブジェクトが作れると嬉しいよね!便利だよね!」というイメージですね。
@asatosi69
@asatosi69 2 жыл бұрын
@@pythonvtuber9917 返信ありがとうございました。 >>「スーパークラスが生成される」というより「コード上に記載されているクラスが生成される」ということですね! 結果的には同じですが、認識がズレていました汗汗 (問題の本質)理解が進みました。 また、何かございましたら、質問させてください。ありがとうございました。
@ivancamiloarandac.2998
@ivancamiloarandac.2998 2 жыл бұрын
Nice video!!
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
Thanks!
@らいと-s6h
@らいと-s6h 2 жыл бұрын
Numpyの回ではimport文でnpを使用することが習慣になっているとのことでした。 また、本動画ではクラスメソッドにおいて引数にclsを用いるのが一般的とありました。 このような、変数名や、メソッド名その他の習慣・慣例を教えていただきたいです
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
コメントありがとうございます😊 習慣・慣例で使われている名前などをまとめた動画をご希望、ということですかね? 検討してみますね😉
【Pythonプログラミング入門】クラスの継承を解説!〜VTuberと学習〜 【初心者向け】
10:53
Новый уровень твоей сосиски
00:33
Кушать Хочу
Рет қаралды 5 МЛН
WORLD BEST MAGIC SECRETS
00:50
MasomkaMagic
Рет қаралды 54 МЛН
Как подписать? 😂 #shorts
00:10
Денис Кукояка
Рет қаралды 8 МЛН
【完全理解】関数・メソッドの違いを超絶わかりやすく解説します。
16:19
いまにゅのプログラミング塾
Рет қаралды 17 М.
30分でだいたいわかる並列プログラミング
30:01
東京大学情報基盤センター
Рет қаралды 8 М.
【プログラミング入門】7分でオブジェクト指向を分かりやすく解説!〜初心者用 〜
7:07
【非同期処理】Pythonの async / await 構文を使ってみよう!
16:56
Pythonプログラミング VTuber サプー
Рет қаралды 13 М.
Pythonでよく見かける『if __name__ == ‘__main__‘』をわかりやすく解説
10:23
いまにゅのプログラミング塾
Рет қаралды 51 М.
static変数、staticメソッドの使いどころやメモリ内の動き【Java入門講座】3-7 static
14:21
せかチャン - 世界一わかりやすい情報科チャンネル
Рет қаралды 35 М.
Новый уровень твоей сосиски
00:33
Кушать Хочу
Рет қаралды 5 МЛН