python とほほさん

  • とほほさんのpythonはやはりわかりやすい
  • クラス
    • クラスを説明するための「もの」と「こと」
      • クラスにあるもの
      • クラスにあること
    • クラスにあるもの
    • クラスにあること
      • 継承(くらす間の階層的関係)
    • クラスの変数
      • クラスには2種類の変数がある
      • 変数の値は、Hogeclass.var、hogeinstance.var2のように呼び出す
      • インスタンスの変数が定まっていないときは、同名の変数がクラスの方にあれば、その値が呼び出される
    • クラスのインスタンス
    • クラスのメソッド
      • 大きく2つ
        • 特殊メソッド("__hogemethod__"のようにアンダーバーで囲むメソッド)
        • 普通のメソッド
      • 特殊メソッドは組み込み関数に対応して何かさせるためのもの(らしい)
    • クラスの継承
      • クラスは親子関係を持つ
class MyClass2(MyClass):
      • と、書けば、MyClassが親クラス、MyClass2が子クラス
      • 子クラスは親クラスのメソッド(・変数)を継承できるし、上書きもできる
      • 親は複数いてもよい
  • インポート
    • インポートには色々な書き方があって、覚えきれない感満載
    • さて
    • こちらにもインポートに関する記事があります
    • どうもこういうことのようです
    • __init__.pyというファイルをディレクトリ構成に配置することで、モジュールファイル群に階層構造を入れながら、全体を一つのモジュールのようにして参照可能にしたものがパッケージである、と
    • その上で、それを取り込みたいのだが
      • 構成があり、親子関係があるのでそれを意識して取り込みたい
      • 取り込んだ後に、どういう名前で呼び出すかを決めたい
    • という2つの要請がある
    • from A.B.C というのは、親子関係を指し示しつつ、取り込みディレクトリ/ファイル名を指定する
    • import D.E.F というのは、実際に読み込む塊を指定する。指定できるのは、色々な高さのディレクトリであったり、ファイルそのものであったり、ファイル内の関数であったりする
    • さて。これにより、D.E.F という名前が『理解できる』状態が作れました、と、そういうことらしい。D.E.F 自体が関数なら、D.E.FをD.E.Fと呼び出して使えばよい。D.E.Fがモジュールなら、D.E.F.hogefxと関数を呼び出せばよい
    • 結局、A.B.C.D.E.Fと長ったらしいけど、 import A.B.C.D.E.Fとすると、長い名前の全体で理解可能になるのに対して、from A.B.C import D.E.Fとすると、D.E.Fで理解可能にできる、という「利用時の省力化」の手段がfrom の役割と見える
    • 同様の「省力化」の手段が、別名での取り込みで、import D.E.F as G は、Gで呼び出せるようにする仕組み
    • 省力化を短い階層構造にするか、別名にするか、の違いだけ
    • * を使う方法というのは、(__all__で指定された)すべての名前を利用可能にするおまじないだが、まあ、明示しながらやることが推奨されているので、これは基本的には使わないことにしておけばよい