Python object()とは?使い方・特徴・サンプルコードを初心者向けに解説

Pythonのobject()は、新しいオブジェクトを作成するための組み込み関数です。
普段のPythonプログラミングでは直接使う機会は多くありませんが、Pythonのクラスやオブジェクトの仕組みを理解するうえで重要な関数です。
この記事では、Pythonのobject()について、基本的な使い方や特徴、objectクラスとの関係を初心者向けに解説します。
Pythonのobject()とは?
object()は、Pythonに標準で用意されている組み込み関数です。
obj = object()
print(obj)
実行すると、次のような結果になります。
<object object at 0x...>
object()を呼び出すと、新しいobject型のオブジェクトが作成されます。
基本的な構文は次のとおりです。
object()
引数は指定しません。
object()の基本的な使い方
もっとも基本的な使い方は、変数にオブジェクトを代入する方法です。
obj = object()
print(obj)
objには、新しく作成されたオブジェクトが入ります。
型を確認するとobjectであることが分かります。
obj = object()
print(type(obj))
実行結果:
<class 'object'>
object()は毎回新しいオブジェクトを作る
object()を複数回実行すると、それぞれ別のオブジェクトが作成されます。
a = object()
b = object()
print(a is b)
実行結果:
False
aとbは見た目が同じようなobject型でも、別々のオブジェクトです。
そのため、is演算子で比較するとFalseになります。
object()と==の違い
object()で作ったオブジェクトは、それぞれ別のオブジェクトです。
a = object()
b = object()
print(a == b)
print(a is b)
実行結果:
False
False
isは「同じオブジェクトか」を調べます。
一方、==は「値として等しいか」を調べます。
object()で作ったオブジェクト同士は等価ではないため、どちらもFalseになります。
objectはPythonの基本となるクラス
Pythonでは、objectは非常に重要なクラスです。
print(object)
実行結果:
<class 'object'>
Pythonのクラスは、基本的にobjectをルートとする継承関係を持っています。
例えば、次のクラスを考えてみます。
class Person:
pass
このクラスは、明示的にobjectを指定していなくても、最終的にはobjectを継承しています。
class Person:
pass
print(issubclass(Person, object))
実行結果:
True
つまり、Pythonのクラスの仕組みを理解するうえでobjectは非常に重要な存在です。
object()で作ったオブジェクトに属性を追加できる?
object()で作ったオブジェクトは、任意の属性を追加するための通常のインスタンスとしては使えません。
例えば、次のコードを実行するとエラーになります。
obj = object()
obj.name = "Python"
objectのインスタンスには、通常のユーザー定義クラスのインスタンスのように自由に属性を追加することはできません。
属性を持たせたい場合は、自分でクラスを作る方法が一般的です。
class Person:
pass
person = Person()
person.name = "Python"
print(person.name)
実行結果:
Python
object()は何に使う?
object()は、一般的なデータを保存する目的で使うというより、「他の値とは区別できる特別なオブジェクト」を作りたい場合などに利用できます。
例えば、特殊な目印として使う方法があります。
MISSING = object()
value = MISSING
if value is MISSING:
print("値が指定されていません")
実行結果:
値が指定されていません
このようにobject()で専用のオブジェクトを作っておくと、Noneなどの通常の値と区別できます。
Noneの代わりにobject()を使う例
例えば、関数の引数が「指定されなかった」ことを判定したい場合があります。
MISSING = object()
def sample(value=MISSING):
if value is MISSING:
print("値が指定されていません")
else:
print(value)
引数を指定しない場合:
sample()
実行結果:
値が指定されていません
Noneを指定した場合:
sample(None)
実行結果:
None
このように、object()を使って専用の目印を作ると、「引数が指定されなかった」ことと「Noneが指定された」ことを区別できます。
object()とNoneの違い
NoneもPythonのオブジェクトですが、object()とは意味が異なります。
print(type(None))
実行結果:
<class 'NoneType'>
一方、
obj = object()
print(type(obj))
実行結果:
<class 'object'>
Noneは「値がない」「何も返さない」といった意味で利用される特別な値です。
一方、object()は新しいobjectインスタンスを作成します。
object()の戻り値
object()の戻り値は、新しく作成されたobjectオブジェクトです。
obj = object()
print(type(obj))
実行結果:
<class 'object'>
そのため、type()を使って型を確認できます。
obj = object()
if type(obj) is object:
print("object型です")
object()とクラスの関係
object自体はクラスなので、次のように確認できます。
print(type(object))
実行結果:
<class 'type'>
つまり、
object
はクラスであり、
object()
によって、そのクラスのインスタンスを作成しています。
これは、例えば次のようなコードと同じ基本構造です。
class Person:
pass
person = Person()
Person()でPersonクラスのインスタンスを作るのと同様に、object()ではobjectクラスのインスタンスを作ります。
object()のまとめ
Pythonのobject()についてまとめると、次のようになります。
| 項目 | 内容 |
|---|---|
| 関数 | object() |
| 引数 | なし |
| 戻り値 | 新しいobjectオブジェクト |
| 型 | object |
| 用途 | オブジェクトの作成、特殊な目印など |
| 属性追加 | 基本的にできない |
object |
Pythonのクラス階層の基底となる重要なクラス |
まとめ
Pythonのobject()は、新しいobject型のオブジェクトを作成する組み込み関数です。
基本的な使い方は次のとおりです。
obj = object()
通常のプログラミングで直接使う機会はそれほど多くありませんが、Pythonのオブジェクト指向やクラスの仕組みを理解するうえで重要です。
特に、次のような用途があります。
-
新しい
objectインスタンスを作成する -
他の値と区別するための専用オブジェクトを作る
-
関数のデフォルト値で「引数が指定されなかった」状態を表現する
-
Pythonのクラス階層を理解する
Pythonでは、すべてのクラスの基礎となるobjectを理解しておくと、クラス・インスタンス・継承・メソッドなどの仕組みも理解しやすくなります。
あわせて読みたい
object()は、Pythonの組み込み関数の1つです。ほかの関数・メソッドとあわせて確認したい方は、次の一覧ページをご覧ください。





