トップ «前の日記(2025年05月26日) 最新 次の日記(2025年06月14日)» 編集

xiphioの備忘録


2025年05月28日

_ [computer] pythonの dataclass

先の、納品書発行の手順を変更する試み、結局元のデータ入力のCのプログラムから書き換えることにしました。InformixのCのプログラムを書き換えてCSVでデータを出力し、それをpythonでExcelのファイルとしてみました。

すでに古典的形式とも言えるCSVでなく、最近流行のjsonや yamlも一応考えたのですが、「この程度のデータ受け渡しならCSVで充分」と言う結論です。それにCSVなら、そのままExcelから開く事も可能なので、何ならその後VBで整形と言う筋道も可能です(あまりVBは使いたくないですが)。ちょっと探してみましたが、jsonやyamlを直接Excelからは開くのは、今のところどうも無理の様です。

pythonのプログラムを書き換えていて、少し気になったのが、Excelの表に書き込む場合の位置の設定です。出力の書式を作ったら、各々その行番号と列番号が決まるのですが、各欄、行番号と列番号を各々別に定数で設定するのは何だかスマートではないなぁ、と言う気がしてきました。例えば

COL_A = 11
ROW_A = 22
・・・・

とかです。(昔はやっていましたが)
しかしながら、かといって

POS_A = [11,22]

みたいに、リストにするのも何だか変ですし、、
「Javaみたいな最近のプログラム言語なら、こんな事でもいちいち新しいクラスを定義してからそれを使うんだろうなぁ、pythonでは普通皆さんはどうしているのかな?」と思い、少し検索してみましたが、これと言った事例はすぐには見つかりませんでした、

そんな場合には、ChatGPT(サブスクで毎月利用料を払っているのに関わらず、殆ど使っていない)で教えてもらうのが一番と思いつき、久しぶりにログインして、チャットで訪ねてみたところ、見事に回答してくれました。

お勧めは、名前付きタプルを使うか、dataclassを使うか、との事です。どちらも全く知りませんでした。
AIに教えてもらってから、改めてそれはどんなものなのか、自分で一応調べてみまして、その結局dataclassを使う事にしました。

from dataclasses import dataclass
@dataclass
class CellPos:
  row: int # 行番号
  col: int # 列番号

こんな感じで、こんなclassを割と簡便に定義できるので、便利ですね。