こちらの続きです。
pythonのプロパティ - C#ATIA
ずっと悩んでいたわけではないのですが、良い方法が無いものかと探していました。
"偶には・・・" と思い、pythonの公式ドキュメントを見ていたところ
"データクラス" と言うものを発見しました。
(Fusion360APIのpythonはver3.7.6です)
What's New In Python 3.7 — Python 3.7.9 ドキュメント
ver3.7からのもので、プロパティが簡単に設定出来る事が分かりました。
こちらの "MENSEKI" の場合ですが、コマンドのダイアログを作成する際は
Listを使って設定を決めています。
MENSEKI/total_area.py at master · kantoku-code/MENSEKI · GitHub
・・・ _selInfo = ['dlgSel','面の選択','-'] _txtInfo = ['dlgtxt','合計面積','-'] ・・・
もちろん何のことかさっぱり分からないはずです。
ListはこちらのaddSelectionInputメソッドのパラメータの
順番で って僕が決めました。
Fusion 360 Help
その為、addSelectionInputする際は、こんな感じです。
MENSEKI/total_area.py at master · kantoku-code/MENSEKI · GitHub
・・・ selIpt :adsk.core.SelectionCommandInput = inputs.addSelectionInput( _selInfo[0], _selInfo[1], _selInfo[2]) ・・・
時間が経つと自分でも分からなくなります、恐らく。
そこで、比較的最近は辞書を利用していました。
こんな感じです。
・・・ _selInfo = [ 'id' : 'dlgSel', 'name' : '面の選択', 'commandPrompt' : '-' ] ・・・
辞書だとaddSelectionInputする際は、こんな感じです。
・・・ selIpt :adsk.core.SelectionCommandInput = inputs.addSelectionInput( _selInfo['id'], _selInfo['name'], _selInfo['commandPrompt']) ・・・
意味は分かるのですが、イマイチなんです。
書く際にインテリセンスが効かないので。
そこで最初に記載した "データクラス" です。
What's New In Python 3.7 — Python 3.7.9 ドキュメント
デコレータ引っ付けてクラスを作成し、プロパティは
名前 : 型
だけで済むんですね。楽。
事前にクラスを用意する必要があるものの、非常に清楚です。
・・・ import dataclasses @dataclasses.dataclass class SelIptInfo: obj : adsk.core.SelectionCommandInput id : str name : str commandPrompt : str _selCrvInfo = SelIptInfo( 'dlgSel', '面の選択', '-') ・・・ _selCrvInfo.obj = inputs.addSelectionInput( _selCrvInfo.id, _selCrvInfo.name, _selCrvInfo.commandPrompt) ・・・
インテリセンスが効くので助かるし、見た目もそれっぽい。
チラッと検索するとこちらがHit。
Python3.7からは「Data Classes」がクラス定義のスタンダードになるかもしれない - Qiita
メソッドも定義出来ちゃうんですね。便利。