【Pythonプログラミング】プロパティデコレータ @property で便利なクラスを作成しよう!〜 getter / setter 〜
Вставка
- Опубліковано 21 лип 2024
- 【訂正】4:25のスライドにてエラーになる旨記載していますが、誤りです。その部分のスライドは無視してください!
Pythonプログラミングに関する情報を発信しているサプーです!
この動画はPythonのプロパティデコレータについて解説している動画です!
・@propertyとは?
・getter, setterとは?
・Pythonでprivate変数は作れるか?
これらについて説明しています💙
実際にPythonコードを動かして実演しているので、最後まで見てもらえたら嬉しいです😊
💙 メンバーシップ 💙
説明動画 ▶︎ • 【ご報告】本日からメンバーシップ開始します!...
登録 ▶︎ / @pythonvtuber9917
iPhoneの方はこらから ▶︎ PythonSuppl/statu...
🎥 関連動画 🎥
クラス解説 ▶︎ • 【分かる!】Pythonのクラスの基本を丁寧...
デコレータ ▶︎ • 【Pythonプログラミング入門】デコレータ...
💻 動作環境 💻
Windows 10
Python 3.9.0
⭐️ チャプター ⭐️
0:00 今日のテーマ「Pythonのプロパティデコレータ」
0:26 前提
0:56 @propertyとは?
1:21 インスタンス変数へのアクセス
2:23 setter
4:25 getter
5:33 @property の使い方
7:57 実演
10:20 setterを使わない例
11:14 deleter
12:08 エンディング
💜 チャンネル説明 💜
Pythonプログラミングについて解説するVtuber サプーです✨
初心者でも分かりやすく、Pythonを体系的に学習できるような動画をアップロードしていきます!
みんなが少しでもPythonが好きになってくれたら嬉しいな💕
Twitterもやってるので、フォローお願いします!
Twitter ▶︎ / pythonsuppl
メール ▶︎ python.supu.vtuber@gmail.com
#Python
#プロパティ
#プログラミング
#setter
#getter
#学習
#パイソン
#PythonVTuberサプー - Наука та технологія
【訂正】4:25のスライドにてエラーになる旨記載していますが、誤りです。スライドの表示は無視してください!
getter、setterがなんのためにあるかいまいち理解できていなかったから、今回の内容はめっちゃありがたい!
なんでいつもこんなに説明うまいんだ笑
ありがとうございます😊
getter, setterは全体を通してやりたいことが明確だと理解しやすいかな、って思ってこのような説明にしてみました😉
遅ればせながら、メンバーシップ入りました!
メンバーシップ登録、ありがとうございます😊
メンバーの管理画面の方では先月もリストに入ってらっしゃった気がしたのですが、また入り直された感じですかね!感謝です!!
はじめまして
メンバーシップ登録させていただきました!
まわりにpython詳しい人がいなくて、細かい部分でよく詰まってしまうので、
動画で勉強させていただいてます。
いつも頭の中が整理されて助かってます!
@propertyの説明がお役に立てていたら嬉しいです😊
そして、メンバーシップ登録ありがとうございます!!
まだメンバーシップの方はコンテンツが少ないのですが、これから徐々にコンテンツ・特典を増やしていこうと思ってるので、メンバーの方でもよろしくお願いします✨
デコレーターって、おしゃれでつけてるんだと思ってました😮
すごい、超便利ですねこれ!
勉強になりました!!!😍🎉🎉🎉
@propertyはとっても便利ですね!!
Pythonの有名ライブラリでも多用されているので、ぜひみなさんに紹介したいと思って出しました😊
お二人とも拝見させてもらってます...俺得だぁ
これは便利ですからよく使ってますね!!
ちなみに、最近はモジュールをクラスみたいにgetter/setter使いたいので、ちょっと調べた。3.7以降はできます。
@は使えないそうですが、__getattr__、__setattr__は使えます。そして__dir__もです。
## test.py
__PRIV = "ustimih"
MSG = "msg"
## @propertyの代わりに__getattr__使います
def __getattr__(attr):
if attr == "Hidden":
return __PRIV[::-1]
elif attr == "MSG":
return "message" # これはリターンしないです
## main.py
import test
print(test.Hidden) # himitsu
print(test.__PRIV) # ustimih、ワーニングもエラーも発生しないです
print(test.MSG) # msg、既に存在してる変数と関数は優先です
propertyデコレータは便利ですよね😊
モジュールでの__getattr__などの使用は初めて知りました!!今度、使ってみます😉
3:12 可愛い
むずいw
最初の説明でクラスの外からは通常のインスタンス変数と同様とありましたが隠蔽が不要な場合に@peopertyを使用するのでしょうか?
pythonはオブジェクト指向言語と聞いた記憶があるのですが。。。
それと終盤にサンプルスクリプトで説明されていましたが、これはクラスの内部からの実行なのでしょうか?
クラスの内部か外部かが分からなくなっちゃいました
※ごめんなさい、試せば分かるかもですが先に質問しちゃいました。
@propertyは隠蔽の要不要で使い分けるのではなく、インスタンス変数にアクセスするときに処理を挟みたい(データの整合性チェックなど)かどうかで使い分けます!
処理が不要であれば、普通にアクセスして、処理を挟みたいときは@propertyを使うと便利だよ!みたいな話になります😉うまく説明できていなくて申し訳ないです😵
また、クラスの内部とはクラスの定義内のことであり、クラスの外とは呼び出し元のことを指していました!なので、サンプルスクリプトの説明では、クラスの外から名前を保存するための変数(実態はself._name)に対して、データを設定したり、データを取得したりしています!
@@pythonvtuber9917 先生ありがとうございます。
となると最初の説明1:08あたりの「クラスの内部ではメソッドが呼び出される」の説明は「外部」な気がしますが?
※おめでとうございます!登録者1万人超えましたね♪
メソッドが呼び出されるのはクラスの定義の中なので、内部という表現にしています😉
クラスの呼び出し元ではインスタンス変数のように扱う(user1.nameの部分)けど、実際にはクラスの定義の中ではメソッドが呼ばれる(def name(self)の部分)、というイメージです!ちゃんと内部・外部の定義を説明していないので、ちょっと分かりにくい説明でしたね...😵
1万人登録、本当にありがたいです😊 今年はさらに飛躍できるように頑張ります!
@@pythonvtuber9917 先生ありがとうございます。
完全に誤解していました。観直してみると、1:08 の説明は@propertyを使用した時、外部から呼び出した場合の流れだったのですね。
変な先入観のせいか外部と内部の違いかと思ってました。
これでスッキリしました。
※ごめんなさい、こちらの誤解なので説明は分かりやすいです。
質問です。ユーザーってクラスにname ってメソッドを紐付ける事でnameもインスタンス変数としてクラス外から見れるって認識でいいんでしょうか?
デコレータによってオブジェクト側(クラスの外側)からのアクセスと紐づけることができる、というイメージです!
実際にインスタンス変数が作られるのではなく、クラスの外からはあたかもインスタンス変数があるかのように見えるのですが、動いているのはメソッドだよ!って感じです😉
アンダースコア一つ(_name)だとprotectedだと思いますが、アンダースコア二つ(__namr)つけたprivateの方を使わなかった理由はなんででしょうか?
ご質問ありがとうございます!
この動画でアンダースコア1つにしたのは、それが一般的な実装方法だからです。じゃあ、アンダースコア2つがNGなのか?と聞かれると、正直ちょっと分からないです🤔 アンダースコア2つで実装しているコードもネットでは見たことがありますが、少ないですね。
@@pythonvtuber9917 解答ありがとうございます!なるほど、慣習的な問題だったんですね!他の言語では確かなるべく狭い権限を優先して定義すると習っていたので疑問に思った次第です
にしても本当に分かりやすい動画ありがとうございます、、!少し深掘りしてくれるのがすごいありがたいなと感じます!
ん?
@プロパティにした
メソッド名を
@セッターの前に付ければ良いと?
例
@プロパティ
def モコモコ
@モコモコ.セッターみたいな?
それとも固定ですか?
気になったので実行しました。ご理解の通り、以下の感じでOKです。
@プロパティ
def モコモコ
@モコモコ.セッター
def モコモコ
しぇりさんのご説明の通りになります!!
命名の説明が分かりにくくてすみません😵
@@-l6358
わざわざありがとうございますm(._.)m
良ければpython仲間になって頂けると😃
@@pythonvtuber9917
いえいえ😃私の理解が弱いだけですからm(._.)m
@@user-dc1yt2fn8s 一緒につよつよエンジニアになりましょう!!