これを作らないと先に進まない気がしてきたので、機能不足ながら、
取りあえず作りました。
import json class Tool(): ''' ツール ''' def __init__(self, infos: dict) -> None: self._type = infos['type'] self._dia = infos["dia"] self._feed = infos["feed"] self._spin = infos["spin"] self._pitch = infos["pitch"] if self._type == "tap" else -1 def __str__(self) -> str: return json.dumps(self._as_dict()) def _as_dict(self) -> dict: return { "type": self._type, "dia": self._dia, "feed": self._feed, "spin": self._spin, "pitch": self._pitch, } @property def type(self): return self._type @type.setter def type(self, value: str): self._type = value @property def dia(self): return self._dia @dia.setter def dia(self, value: float): self._dia = value @property def feed(self): return self._feed @feed.setter def feed(self, value: float): self._feed = value @property def spin(self): return self._spin @spin.setter def spin(self, value: float): self._spin = value @property def pitch(self): return self._pitch @pitch.setter def pitch(self, value: float): self._pitch = value class ToolManager(): ''' ツールの管理 ''' _id: int = -1 def __init__(self) -> None: self.tools = [] def create(self, infos: dict) -> int: ''' 工具の作成 戻り値はID ''' ToolManager._id += 1 tool = Tool(infos) toolData = { "id": ToolManager._id, "tool": tool, } self.tools.append(toolData) return ToolManager._id def get_tool(self, id: int) -> Tool: ''' IDでの工具の取得 ''' for toolData in self.tools: if toolData["id"] == id: return toolData["tool"] return None if __name__ == "__main__": ''' ユニットテスト ''' toolMgr = ToolManager() id1 = toolMgr.create( { "type": "drill", "dia": 10, "feed": 200, "spin": 1000, } ) print(f'ID:{id1}: {str(toolMgr.get_tool(id1))}') id2 = toolMgr.create( { "type": "tap", "dia": 10, "feed": 200, "spin": 1000, "pitch": 0.8 } ) print(f'ID:{id2}: {str(toolMgr.get_tool(id2))}')
前にも書いたような気がするけど、pythonって何故setter/getterが無いの?
って度々思います。検索したらこちらが。
なぜPythonにはsetter/getterメソッドがないのか? - Qiita
Toolクラスをプロパティにしているのですが、例えば工具の種類を示す
typeプロパティをこの様にしています。
@property def type(self): return self._type @type.setter def type(self, value: str): self._type = value
"type"じゃ間違えやすいので"toolType"に変更しようと思った時、
最低3か所、下手したら5か所も修正が必要なんですよね。
ちっとも清楚じゃない。
だからこそ、publicな拡張プロパティ的な書き方しろ!って事なんだろう
けど・・・。動的型付けの場合は仕方が無いのかなぁ。