Diagonal M

データサイエンス系長期インターンで学んだことなど

【Python】オブジェクト指向プログラミング vol.1 ~オブジェクトとは~

オブジェクト指向への理解が浅くインターン先で理解しきれないPythonのコードがあったので勉強したことを複数記事に渡ってまとめていきます

オブジェクトとは

Pythonの公式ドキュメントでは以下のように記載されています

pythonにおけるオブジェクト(object)とは、データを抽象的に表したものです

Pythonプログラムにおけるデータはすべて、オブジェクトまたはオブジェクト間の関係として表されます。

オブジェクトはアイデンティティ値(identity)、型(type)、そして値(value)を持ちます。

まったく意味がわからないので一つずつ分けて考えます。

オブジェクトには大きく分けて2つの性質があります。

アイデンティティ、型、値とは

オブジェクトにおけるアイデンティティとはPythonで使われるオブジェクトはID番号を持っているという意味です。以下のコードを実行すると

hello = 'hello world'
id(hello)
# 2448634654512

このように数字の羅列が表示されます(コメントアウト部分を出力とします)。id関数を使うことでそのオブジェクトのIDが割り振られていることがわかります。

オブジェクトの値は変数に代入されたデータのことです。上の場合はhello worldが値になります。

オブジェクトの型は整数型や文字列やリスト型といったもので、オブジェクトがどんな型を持っているか確認する関数にtypeというものがあります

type(hello)
# <class 'str'>

strというクラスのオブジェクトだと表示がされます。

蛇足ですがオブジェクト指向とは概念であるということをよく聞き余計に混乱させられます。

例えば上のリストは型のひとつであり、内部に複数のデータをリスト形式で持ちます。例えば以下はすべてリスト型にデータです。

[]
[1, 2, 3]
['hello', 'world']
[1, 'python', 3]

リストは "" であり、上記はそのデータです。リストは "概念" で「1, 2, 3という数字が格納されたリストのデータ」は具体的なモノです。オブジェクト指向におけるこの「概念のレベルでのデータが」クラスであり、その具体的なモノがオブジェクトと呼ばれます。

クラスとオブジェクトの関係を以下にまとめます。

クラス オブジェクト
整数型 1, 2, 3
文字列型 'hello', 'world'
リスト [], ['hello', 'python']

この表だけですとオブジェクトととは「具体的なデータ」のように思えますが、そうではありません。データに加えて処理も含んでいます。このことを覚えておいてください。次回はプログラムにおけるオブジェクトの表現についてまとめます。