前回に続いて、クラスの章で楽しめたところをノートしていく。

記録管理に辞書じゃなくてヘルパークラスを使う

もちろん簡単なやつなら辞書でいい。クラスを使うタイミングとしては「辞書が入れ子になっちゃった」、「タプルが3以上の要素数をもっちゃった」など。 これは自作ゲーム『一石二鳥』のとき何を参考にするでもなく自然にできてたからよさげ。

 

フック

list.sort(key=lambda: ...)

みたいに関数を渡して振る舞いをカスタマイズする仕組みをフックというそうだ。そもそもsortに関数を渡せることを知らんかった……。

__call__を定義するとオブジェクトが関数みたいに呼び出せる

すげー! じゃあstrクラスを改造すれば

'ただの文字列'()

なんてことができるってことかよw

と思ってすこしいじってみたんだが、どうやら文字列などの組み込み型は改造ができんようになってるようで……。このイタズラは完遂できなかった。

クラスメソッドをコンストラクタとして使う

@classmethod
def foo(cls):
    return cls()

こういう……ことだとは思うんだけどこれだけじゃ意味不明だよな。

子クラスで親クラスの__init__を呼ぶとき

super().__init__()

とする。親クラスのメソッドは子クラスでも息づくんだから、こんなの必要ないじゃんと思ったが。そっか、子クラスにinitを書いてしまったら親クラスのinitは実行されなくなっちゃうのか。

private属性の使い方

self.__foo

こういう命名の変数はprivate属性になってクラス内でしかアクセスできなくなる。子クラスからもダメ。ただし

_Klass__foo

っていう呼び出し方でコールすることが可能。private変数は、コントロール外のサブクラスによる名前衝突を避けるために使いましょう。

クラスは理解したからこの章はまあオッケーだった。が、次章がどうもするりと入ってこねえ……。

Effective Python 感想文一覧