Pythonのお勉強 Part75 (848レス)
Pythonのお勉強 Part75 http://mevius.5ch.net/test/read.cgi/tech/1743698824/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
706: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 09:59:58.99 ID:46uwwH/J0 たとえばlistにリスト型宣言時に想定されていた要素型の部分型のオブジェクトを要素として入れたりすると、listは共変じゃないから型の互換性がないぞって警告が出たりするけど、そういうのにどこまで対応するのがいいのかってのがよく分からない。castして黙らせるのがいいのか、そういうものだと放置しておくのがいいのか。どちらにせよ、型ヒントを書かないコードと比べて可読性の低下に見合うメリットがあるのか。 基本的には型付けしていく方向性の方が良いんだろうなと思っているけど、今一つ自分のスタンスが固まり切らない感じ。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/706
708: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 10:18:49.37 ID:46uwwH/J0 705と707は、方向性としては正反対なのでは。707はいわゆるダックタイピングのことだと思うけど、オブジェクト指向は静的型付けとも両立するよね。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/708
711: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 10:36:56.04 ID:46uwwH/J0 静的型チェッカーは、onにすると基本的には全コードについて型チェックをするものだと思っていたけど、そこは型チェッカーの設定次第で調整できるのかな。あとはAny……。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/711
715: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 11:10:42.61 ID:46uwwH/J0 >>713 ProtocolについてはロバストPytnonに出てきたのをちょっと読んだくらいしか知識がないのだけど、こういうときに使えるものなのかな。: list[base] という型指定はライブラリの中でされていて書き換えるのは躊躇されるので、そうだとするとちょっと難しいのかなと。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/715
717: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 14:21:56.81 ID:46uwwH/J0 GUIライブラリのwidgetコンテナで、格納される具体的なwidget群を属性widgeds : list[widget] に受け取るみたいな感じなんだよね。 container.widgets = [ label(), button(), textbox(), …… ] (label, button, textbox等は全てwidgetの部分型)みたいな感じで配置するんだけど、そこで706みたいな警告が出たり出なかったりする。 ありがちな状況なので、たぶん定石的な対処方法があるんじゃないかと思うんだけど。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/717
719: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 15:45:42.19 ID:46uwwH/J0 Pytnonの型チェックはあくまでもヒントだからエラーというか警告だけどね。自分も比較的最近知ったことだから勘違いがあるかもしれないけれど、listはmutableコンテナだから共変ではないんだって。だから、A <: B(Bが上位型でAはその部分型)のときでもlist[A] <: list[B] にはならないらしいよ。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/719
720: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 16:10:13.74 ID:46uwwH/J0 たしかにlistの要素として、その型宣言時の要素型のサブクラスのインスタンスを入れるだけなら特に問題ないはずだとは自分も思うんだよね。 717のcontainer.widgets = [ label(), button(), textbox(), …… ] は、両辺の式の型の間に互換性がない(listは非変なので)点に問題があるということだとすると、container.widget.extend( …… ) とかの書き方にしたら大丈夫なんだろうか。ライブラリのリファレンスとかにはそういう書き方は出てこなかったけど。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/720
723: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 16:57:06.52 ID:46uwwH/J0 なるほど、たしかにそれだと警告は出ないね。短い再現コードが出せるようならやってみるけどちょっと難しそうかな。たぶん代入文の右辺について、型チェッカーが(list[widget]と互換性のない)型情報をコード内の別のところから得ちゃっているということなんだろうと思うけど。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/723
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.360s*