昨日の__getattr__に引き続いてメタプログラミングシリーズですよ。 調子に乗るとグチャグチャになるのでほどほどに。 getattr関数と並び立つ(?)のがsetattr関数。 その名の通り、クラスインスタンスに値をセットできます。 値じゃなくて関数もセット出来るのだけれど、バインドされないのでちょっと面倒臭い。 バインドされないと何が起こるかというと、instance.method()って呼び出し方をしてもselfが渡されないので、selfが必要ならinstance.method(instance)ってやらないとになっちゃう。 まあそんな事はともかくだ。 setattr(a, 'key', value)とすると、内部的にはa.__setattr__('key', value)みたいに処理されているらしい。 しかも、a.key = valueとした場合も__setattr__が呼ばれ
![pythonの__setattr__をオーバーライドしてみたら楽しいかもしれない。 - Blanktar](https://cdn-ak-scissors.b.st-hatena.com/image/square/471b0e05ccf7b5422699002e66b5b2a3f58ffd1f/height=288;version=1;width=512/https%3A%2F%2Fblanktar.jp%2Fimages%2Fblog%2F2014%2F03%2Fpython-setattr.png)