Pythonのお勉強 Part62 (454レス)
上下前次1-新
抽出解除 レス栞
249(3): デフォルトの名無しさん [] 2020/06/19(金) 00:00:07.20 ID:NJwW7ejS(1/2) AAS
python 使い始めて数年だけども、今日初めて知ったことがあるので質問させてください。
python のクラスって、インスタンスを生成した後に、勝手にメンバー変数を定義できちゃうものなんですか?
もし、それがよく知られている機構なのであれば、一般的に何と呼ばれているのか教えてください。
例)
>>> class myClass():
... pass
...
>>> c1 = myClass()
>>> dir(c1)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> c1.hoge = 'hogehoge'
>>> c1.hoge
'hogehoge'
>>> dir(c1)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'hoge']
また、こう言ったことをさせないためには、どうすれば良いのでしょうか?
250(1): デフォルトの名無しさん [sage] 2020/06/19(金) 00:46:41.82 ID:2U294rNY(1) AAS
>>249
よく知られてる機構だけど特別な名前が付いてるわけではない
後から変更させたくないなら@dataclass(frozen=True)を使えば良いと思う
256: デフォルトの名無しさん [] 2020/06/19(金) 14:11:20.02 ID:GhHOGZr1(1) AAS
>>249
そのための__setattr__()
259: 249 [] 2020/06/28(日) 01:25:43.97 ID:wIxce2FJ(1) AAS
みなさん、ありがとうございます。
このモンキーパッチングが役に立つ場面ってどんなところなんでしょ?
自分で思いつく限りでは、そこそこ規模の大きいプロジェクトでのユニットテストで
不具合に対する対処で一時的にメソッドを書き換えてみたりとか、デバッグ用にフィールドを
追加してみたりとか、そんなことしか思いつかんです…
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.943s*