前提・実現したいこと
ファイル名などの設定情報をclassで管理したいと思っていますが、記述をシンプルにするためにdataclassを併用したいと思っています。
疑問点
以下コードのうち、dataclassを使わないSampleConfig1では、初期化時に元フォルダを指定すると、元フォルダに従属してpath_childも更新されるのですが、dataclassを使ったSampleConfig2では実現されません。
- なぜ、dataclassを使うと挙動が変わるのでしょうか?
- dataclassで元フォルダの更新を実現するためにはどうしたらいいでしょうか?
該当のソースコード
Python3.8
1from pathlib import Path 2from dataclasses import dataclass 3 4class SampleConfig1(): 5 def __init__(self, path_parent=Path('src', 'apis')): 6 self.path_child_a: Path = Path(path_parent, 'A') 7 self.path_child_b: Path = Path(path_parent, 'B') 8 self.path_child_c: Path = Path(path_parent, 'C') 9 self.path_child_d: Path = Path(path_parent, 'D') 10 11@dataclass 12class SampleConfig2(): 13 path_parent: Path = Path('src', 'apis') 14 path_child_a: Path = Path(path_parent, 'A') 15 path_child_b: Path = Path(path_parent, 'B') 16 path_child_c: Path = Path(path_parent, 'C') 17 path_child_d: Path = Path(path_parent, 'D') 18 19 20sampleconfig1 = SampleConfig1(path_parent=Path('/tmp')) 21print(sampleconfig1.path_child_a) # /tmp/Aとなり、サブディレクトリ名が親ディレクトリに従属する形で更新される 22 23sampleconfig2 = SampleConfig2(path_parent=Path('/tmp')) 24print(sampleconfig2.path_child_a) # src/apis/Aとなり、親ディレクトリが差し替わらない

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/22 04:30