読者です 読者をやめる 読者になる 読者になる

真面目なノート

こまめにその日の進捗などをメモしておく。

いっぱい寝たけどトレーニングもしたしおっけー☆(๑˃̵ᴗ˂̵)و

effective pyhton

Item 25. 親クラスをsuperで初期化しよう

菱形継承問題 - Wikipedia

主に上のひし形問題の話。
(例としてアレな感じもあるけど)製品の名前と値段を表すクラスを考える。
多分こんな感じ。

class Product:
    def __init__(self,name,value):
        self.name = name
        self.value = value

で、Productクラスを親に持って、ダース単位の製品を表すクラスと、二倍の個数の製品を表すクラスを作る。
さらにそれらを継承して、2ダース分の商品を表すクラスも作る。 (多分こんな継承の仕方絶対しない気がするけど、そんな感じの例が使われていたのだ。)

class Dozen(Product):
    def __init__(self, name, value):
        Product.__init__(self, name, value)
        self.value *= 12


class Double(Product):
    def __init__(self, name, value):
        Product.__init__(self, name,value)
        self.value *= 2


class TwoDozen(Dozen, Double):
    def __init__(self, name, value):
        Dozen.__init__(self, name, value)
        Double.__init__(self, name, value)

で、2ダース分の商品の値段をprintしてみる。

p = TwoDozen("hoge",1000)
print(p.value)

結果は2000!んなわけあるか死ね。
結局、Productのコンストラクタが二回呼び出されちゃってるので、ダメ。
で、そういう時はsuperを使う。
python2とpython3で使用が違うのだけれど、2系より3系のほうが文法上のノイズとかが改善されてるからpython3を使うべき。
僕はもともと3系を使っているから問題ない。
みんなも3系を使うべき。

class Dozen(Product):
     def __init__(self, name, value):
        super().__init__(self, value * 12)


class Double(Product):
    def __init__(self, name, value):
        super().__init__(self, value * 2)


class TwoDozen(Dozen, Double):
    def __init__(self, name, value):
        super().__init__(self, value)

こんな風に書く。ちゃんと動く。嬉しい(๑˃̵ᴗ˂̵)و
2系については面倒なのでわざわざ書かない。
superの引数として、自身のクラス名とselfを渡してあげる。

すごいH

ステートモナド。詰まってる。

趣味

運動

下半身のトレーニングをした。
スクワットデッドリフトの後に有酸素運動をするのはかなりきつい。足が動かなくて運動にならなかった。
持久力トレーニングの日は筋トレの日とは別に設ける必要がありそうだ。

お絵描き

デッサン(というか写真の模写)を進めた。
今は割と写実的な感じでやっているので、このあとイラストの模写をして、風景写真の模写をして、一回好きなように絵を描いて、というルーチンにしていきたい。

雑記

指にはめるタイプの黒曜石とかいうクリッカーがなかなかよかった。

やっぱりプレゼンの時は自分のタイミングでページをめくれる方が良いし、それを指にはめてあんまり目立たないように行えるというのは結構いい感じだ。
次回あたりでobenkyoの発表をしたいので、資料集めを始めた。
やっぱり早起きできたほうが進捗は生まれやすそうなので、今日は早めに寝よう。