IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第65回 Pythonプログラムでエラーを出す前に確認したいこと ~変数名とクラス編~ (菱沼佑香) 2025年6月

こんにちは、吉政創成 菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。

現在学習中の5章「怪しいコード臭」では、バグを未然に防ぐために、どういった点に注意した方が良いのか、対処するか否かの判断について学んでいます。
今回は変数名に数字がつけられている場合についてです。

変数での番号管理はしない

ほぼ読み物な個所なのでここはさらっと書いておきます。
同じ種類のデータがあった場合、変数1、変数2というような感じで保存したくなることがあります。
が、これはあまりよろしくなかったようです。。。

---------------------------------------------------------------
P.81
例えば、入力ミスを防ぐためにパスワードを2回入力してもらうようなフォームを扱う場合、パスワードの文字列をpassword1とpassword2という変数に格納することがあります。これらの数字は、変数に何が入っているのかの違いをうまく説明できません。また、これらの変数がいくつあるのかを示すものでもないので、password3やpassword4もあるかどうかはわかりません。手当たり次第に数字をつけるのではなく、意味がはっきりとわかる名前を付けるようにしましょう。このパスワードの例ではpasswordとconfirm_passwordのような名前が良いでしょう。
(中略)
変数名に2以上の数字を付けたければ、リストやセットのデータ構造を使いましょう。例えば、pet1Name、pet2Name、pet3Nameなどの値はpetNamesというリストに格納します。
---------------------------------------------------------------

とにかく一目でわかりやすい変数名を設定するという事を考えれば、確かに数字を入れることは、どの●●?と混乱を生みやすくなるように思います。
ちなみに、どのデータ構造を使えば...?と悩みそうなので、それぞれの違いがまとめられているページを探してみました。興味がある方はこちらをどうぞ。
【Python】リスト・辞書・集合・タプルの比較

関数だけでいいのか、クラスを使うことにするかの見極め

では次に、「関数やモジュールにすべきクラス」という項目になります。
どうやらこの項目は、特に他言語に慣れた方への注意喚起で入れられている模様...。

---------------------------------------------------------------
P.81、82
Javaなどの言語を使うプログラマーは、クラスを使ってプログラムのコードを整理することに慣れています。例えば、サイコロを表したDiceクラスの例を見てみましょう。このクラスにはroll()メソッドがあります。


>>> import random
>>> class Dice:
...    def __init__(self, sides=6):
...        self.sides = sides
...    def roll(self):
...        return random.randit(1, self.sides)
...
>>> d = Dice()
>>> print('You rolled a', d.roll())
You rolled a 1

一見よくまとまったコードのように見えますが、サイコロなので実際に必要なのは単に1から6の乱数を得るだけだという事を考えてみてください。次のようなシンプルな関数呼び出しで十分ですね。


>>> print('You rolled a', random.randint(1, 6))
You rolled a 6

Pythonのコードはクラスの中に必ず書かなければならないわけではありませんし、定型文のような記述も必要ありませんので、他の言語と比べると気軽にコードが書きやすくなっています。1つの関数を呼び出すためだけにオブジェクトを作成していたり、静的なメソッドしかないクラスを書いていたりしたら、それらは関数を書いた方がよいことを示す目的だと思ってください。
---------------------------------------------------------------

という事だそうで...。
私自身は他の言語を知らないのでもう少し調べてみたところ、Javaの場合、定型文があること、そしてすべての処理をクラスの中に書く必要があるという言語仕様のため、単純な処理でもクラスの定義が必要になるんだそうです。
一方で、Pythonはクラスで定義するのは必須ではなく、また定型文もないため、関数一つだけでも結果を表示することができます。
例: Javaは「Hello, world!」と表示するのに、public class や main() メソッドなどの定型文の記述が必要
→Pythonではprint("Hello, world!")だけでOK。

文中の例の場合、単純にサイコロの数字のどれか一つを出すだけなので、わざわざクラスとして書かなくても、関数1行で済みます。これが例えば、「サイコロを何度も振る」とか、「出た目の数字を記録しておきたい」とか、「複数のサイコロを振りたい」というような、処理が複雑になってくるものの場合、関数を組み合わせて書くことはできるものの、クラスにしておくと後々、再利用しやすかったり、拡張し易かったりと、便利に使うことができるよということのようです。

それではきりが良いので、今回はこちらで終了です。今回もお付き合いいただきありがとうございました。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes