やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

再代入禁止クラスを独立させ、継承してみた

前回のが問題なく使えるか確認した。

成果物

GitHubPython.Const.201709141238

前回まで

sys.modules__setattr__で再代入禁止を実装したクラスのインスタンスを代入するという荒業。

今回の本題

任意のクラスに継承させる

Const.py

class Const:
    class ConstError(TypeError): pass
    def __setattr__(self,name,value):
        if name in self.__dict__.keys(): raise self.ConstError('readonly。再代入禁止。')
        self.__dict__[name]=value

MyConst.py

from Const import Const

class MyConst(Const): pass

import sys
sys.modules[__name__]=MyConst()

MyConstに再代入禁止を実装できた。

本当はsys.modulesへの代入も継承しただけで自動的にやって欲しかったが、また次回。

所感

現状では中途半端で実用できない。

次回はおそらくメタクラスを使うことになる。動的言語の本丸にして難関。