C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

pythonのプロパティ2

こちらの続きです。
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
メソッドも定義出来ちゃうんですね。便利。