内部実装を読んで理解する『len()関数がオブジェクトの長さを手にいれる仕組み』 #pyconjp #pyconjp_203
実装された__len__がきちんとintを返しているかどうかをlen()は確認している #pyconjp_203
2017-09-08 14:09:30object.length()でいいんじゃないの? __len__()がint以外を返すとlen(obj)はTypeErrorを返す! #pyconjp_203
2017-09-08 14:09:51len関数の中でオブジェクトの__len__メソッドを呼んでいる。さらに、__len__メソッドの返り値の型チェックもやっている #PyConJP #pyconjp_203
2017-09-08 14:10:29__len__を書き換えた場合にちゃんとintがかえってくるって保証ができないから、obj.__len__じゃなくてlen(obj)でアクセスするのかな #pyconjp_203
2017-09-08 14:10:41TypeError: __len__() should return an int になるのかー! #pyconjp_203
2017-09-08 14:11:16実はlen関数は型と値をチェックしている。Adapterパターンなのかー。 #pyconjp_203
2017-09-08 14:11:18#pyconjp #pyconjp_203 ほーん。len()は__len__を読みに行っているだけなので数値を返す__len__を実装すれば独自クラスでもlen()に対応できるし、変な値を返すこともできるw
2017-09-08 14:13:45python が len 関数使うのは歴史的事情だと思うけどね。今は length をプロパティにすることも簡単に厳密に出来るけど、今更変えられないよね #pyconjp_203
2017-09-08 14:14:55「Protocol」という言葉はPython公式ドキュメントに何度も出て来るが、定義の一覧はどこにもなさそう #PyConJP #pyconjp_203
2017-09-08 14:15:03とりあえず今やっている説明だけでlv1はないなwと思いつつ、ためになる話で後で復習したい #pyconjp #pyconjp_203
2017-09-08 14:15:10protocol とは公式ドキュメントにも書いてある。Python2.2で初登場、protocol一覧というものはない。 PEP-544でPEPにも初登場 #pyconjp_203
2017-09-08 14:15:18プロトコル一覧をみるには、corrections.abc(抽象基底クラス)のとこみるのが良さそう #pyconjp_203
2017-09-08 14:16:09組み込み関数にすることで、メソッドとして実装するよりコードを減らせるのか。 #pyconjp_203
2017-09-08 14:16:44len(), min(), max() ... 等によって__len__とかの実装コストを下げている #pyconjp_203
2017-09-08 14:16:53