📘 hkob-astro-notion-blog

これまではてなブログにて情報発信をしていましたが、令和5年3月22日より、こちらでの情報発信を始めました。2019年以前の古い記事は過去の Middleman 時代のものなので、情報が古いです。記録のためだけに残しています。

MonoImageIterator 親クラスの作成 - Rubyist の Python 学習記録(14)

💡
この記事は Middleman 時代に書いた古いものです。記録のため、astro-notion-blog に移行していますが、あまり参考にしないでください。

ここまで書いた段階で MonoImagePixelIterator と MonoImageBlockIterator でほぼ同じ表記であることを示した. すなわち多くの部分が共通に記述できることになる.そこで,共通部分を MonoImageIterator として親クラスに吸い出すことにした.

MonoImageIterator の作成
  • MonoImageIterator は両クラスの共通部分だけを抜き出したものになる. すなわち,__init__ コンストラクタ,value プロパティ,__iter__ メソッドを抜き出した.
    class MonoImageIterator:
        def __init__(self, mono_image):
            self._mono_image = mono_image
            self._width = mono_image.width
            self._height = mono_image.height
            self._f = self.vector_iterator_func if mono_image.ndim == 1 else self.matrix_iterator_func
            self._getter = self.vector_getter_func if mono_image.ndim == 1 else self.matrix_getter_func
            self._setter = self.vector_setter_func if mono_image.ndim == 1 else self.matrix_setter_func
    
        @property
        def value(self):
            return self._getter()
    
        @value.setter
        def value(self, v):
            self._setter(v)
    
        def __iter__(self):
            return self._f()
MonoImagePixelIterator の修正
  • MonoImagePixelIterator の class 記述および __init__ は以下のように変更する. 親クラスである MonoImageIterator を継承するようにし,__init__ は super().__init__ を呼び出すだけである.
    class MonoImagePixelIterator(MonoImageIterator):
        def __init__(self, mono_image):
            super().__init__(mono_image)
  • value プロパティおよび __iter__ は親クラスで定義されているので削除した.
MonoImageBlockIterator の修正
  • MonoImageBlockIterator の class 記述および __init__ も以下のように変更する. 親クラスである MonoImageIterator を継承するようにし,__init__ も super().__init__ を呼び出している. MonoImagePixelIterator との違いは,_br, _bc, _sr, _sc, _is_small_ok 変数を定義する点である.
    class MonoImageBlockIterator(MonoImageIterator):
        def __init__(self, mono_image, br, bc, sr, sc, is_small_ok):
            super().__init__(mono_image)
            self._br = br
            self._bc = bc
            self._sr = sr
            self._sc = sc
            self._is_small_ok = is_small_ok
  • MonoImagePixelIterator と同様 value プロパティおよび __iter__ は親クラスで定義されているので削除した.

短いがきりがいいので今日はここまで.