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

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

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第31回 オブジェクトとクラスとは?インスタンスとオブジェクトの違いも含めてざっくりイメージしてみた (菱沼佑香) 2022年4月

こんにちは、吉政創成 菱沼です。
今回も「いちばんやさしいPython入門教室(大澤 文孝氏著) 」を片手に勉強していきます。

「クラス」と「オブジェクト」の概念を学ぶということで、その準備段階として、tkinterのcanvas上に動く円を作るという処理を作っています。
前回は円の数を増やし、複数の円を一つのcanvas上で動かすという処理を作りましたが、記述が煩雑になりがちな部分をリストとディクショナリを使ってすっきりさせました。
ここからはクラスとオブジェクトを使った記述について学んでいくことになりますが、まず今回はオブジェクトやクラスの概念、インスタンスとオブジェクトの違いとは何かについて学んでみたいと思います。

プログラムを部品化...オブジェクトやクラスを使った開発

前回学んだディクショナリとリストを使ってデータを管理し、ループ処理するというに対して、最近はプログラムを部品化(コンポーネント化)する方法が採られることが増えているそうです。
たとえば、ここまで作った動く円のプログラムで言えば、座標と移動方向、色の情報が設定された円の状態が「部品」で「オブジェクト」であり、そして動かすなどの「命令」を「メソッド」というそうです。
前回までに使用していた手法とこの手法との違いのあたりやオブジェクトの概念について、テキストから引用します。

------------引用------------
P.213
大きな違いは「データをどこで管理するか」という点にあります。これまで作ってきたプログラムでは、データがディクショナリやリストでひとまとめにして管理されていたのに対し、オブジェクトを使ったプログラムの場合は、それぞれのオブジェクトがデータを持っており、それに対して命令を出すようにプログラミングします。
(中略)
オブジェクトはプログラマが記述するものではありません。プログラマが記述するのは、オブジェクトの基となる「クラス(class)」と呼ばれるものです。
オブジェクトを使いたい場合、プログラマは、クラスというものをプログラムとして記述しておきます。こうしておいて、オブジェクトを使いたいときには、Pythonの特定の文法を使って、クラスからオブジェクトを作り出します。こうして作ったオブジェクトのことを「インスタンス(instance)」と言います。そして、クラスからオブジェクトを作り出す操作のことを、「実体化する」とか「インスタンスを作る」と言います。
(中略)
クラスとオブジェクトは、1対多の関係です。クラスを作成しておけば、そのクラスを基としたオブジェクトを、いくつでも作成できます。
------------------------------

わかるようなわからないような...。クラスとインスタンスはイメージできますが、オブジェクトとインスタンスの違いがいまいちイメージできないので、調べたり、聞いてみたりしました。図で現すと大体こんな感じのようです。

※注意※
オブジェクトやクラスの概念はベテランでもうまく伝えるのが難しい内容だそうです。一応周囲のベテラン勢に確認していただきましたが...あくまでざっくりな「こーいうかんじなのね」というイメージで受け取っていただければと思います。

fig01

「クラス」は設計図やひな形のようなものだそうで、このプログラムの中で言えばクラスに書かれていることは円の設計図ということになります。
円に設定した内容はx、yの座標や移動量、色ですが、そういった設定した内容を「プロパティ」というそうです。

そして、プログラム内ではmoveという関数を作って円を動かす指示をしていましたが、それが「メソッド」になります。ちなみにメソッドはクラスの中で一緒に設定されていることもあるそうです。
そして実行してできたもの(実体化したもの)が「インスタンス」です。

次の画像は前回のサンプルコードです。クラス、プロパティ、メソッドをプログラム内でマークしてみました。

fig02

オブジェクトとインスタンスの違い

さて、インスタンスとオブジェクトの違いなのですが...
オブジェクトは「プログラムされて処理できる実体の"総称"」であるのに対し、
インスタンスは「クラスがインスタンス化(実体化)したもの」ということなのだそうです。

...つまり、オブジェクトとインスタンスの関係を正確にあらわすと、
「インスタンスはオブジェクトの一種」だけど、「オブジェクトはインスタンスではない」だそうです。

とはいえ、実際に誰かと話すときにはオブジェクトとインスタンスは同じ意味で話されることは多いという話でした。

この概念を理解するには素人にとってはややこしい話だな...と思いながら調べたものをまとめてみましたが、ベテランの方々によれば、とりあえず概念やら言葉の定義なんかは横に置いておいて、いろいろなコードを書いていけば自然と概念をつかめてくるそうです。とにかく経験あるのみ...ということですね。

オブジェクト指向は慣れるととっても便利なものだそうですし、今や開発には欠かせないものだそうです。
そしてPython自体はオブジェクト指向言語なので、Pythonを使う上ではきっとオブジェクトやクラスについて理解できていた方がいいんだろうなあと思います。

説明ばかりの回でしたが、今回はこれで終了です。ざっくりイメージとしてお役に立てれば幸いです。
次回は実際にクラスのつくり方の部分を実際にやってみて、徐々にでもイメージをより明確にできればと思います。
今回もお付き合いいただき、ありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes