エキPy読書会04 (2010/11/2)

日時:

2010/11/02 19:30 - 22:00

範囲:

3章(p95) 構文ベストプラクティス - クラスの世界

エキスパートPythonプログラミングの読書会4回目

質疑応答(覚えてる範囲)

  • 質問: FunctionType は継承できるの?
    • A: できません

  • 質問: BuiltinFunctionType と FunctionType の違いは?
    • A: C で実装された組み込み関数とそれ以外の違いかなぁ

  • 質問: str 型の振る舞いを変更したりできるの?
    • A: str を継承してメソッドをオーバーライドして変更することはできる

  • 質問: __getattr__ と __getattribute__ の違いは?
    • A: インスタンスに対する属性アクセス時に無条件で呼び出されるかどうかの違い

      アクセスを全てをフックするか、しないかで使い分ける?

  • 質問: 読書会で扱ったサンプルは Web にアップされるか?
  • 質問: super はださいと思いませんか?
    • A: ださいと思う

  • 質問: super に関係ない別クラスを指定するとどうなる?
    • A: 継承関係がないとエラーになる

  • 質問: 親で定義、子は経由して、孫で子のメソッド呼び出しはできるか?
    • A: うん、できるよ

  • 質問: object を継承したクラス(新スタイルクラス)で object が持っていないメソッドを呼び出すとエラーにならないの?
    • A: 実行してみたらエラーになりますね

  • 質問: 多重継承はいらなかったりしませんか?
    • A: Mixin とか、インタフェースとか別の解決策が必要になりますね

  • 質問: Python3 の普及はいつぐらい?
    • A: 他のライブラリが追随するのを待つと3年ぐらいかかるかなぁ

  • 質問: Python で継承させないように禁止させることができますか?
    • A: 調べましょう

  • 質問: 多重継承は避けるべきと言いながら、言語に機能があるのはなぜですか?
    • A: できることとポリシーとしてやらないことは別のお話

      C++ は多重継承できる言語の代表格、Java は実装継承を禁止してインタフェース継承を許す その辺の経緯が History of python に書いてあるかも?

  • 質問: 具体的に多重継承が使い易い例はありますか?
    • A: なかなか具体的な用途をあげるのは難しい

      Python でよく使うのは Mixin の使い方かなぁ

  • 質問: Mixin 何それ?うまいの?
    • A: util() 関数を全ての子クラスで使いたいときに継承だと、

      親クラスに実装することもできるけれど、本質的には親クラスには必要ない また中間でクラスを経由するときに不要な実装も行われる Mixin を使用すると、DB の実際の実装を切り替えたり、 テスト目的でモックを差し替えるといった用途にも便利

  • 質問: C++/PHP はコンストラクタとクラスが同名なのに Python が違うのはなぜ?
    • A: 言語設計のお話ですが、同名の方が廃れる傾向にある?同名だとトラブルが多いかも?

参考