Pythonでは数値もオブジェクト!Javaとの違いをやさしく解説

こんにちは。ゆうせいです。
今回は「Pythonでは数値もオブジェクトである」という、Pythonのちょっと変わった特徴について解説します。
読者はすでにJavaを少しかじっている新人さんという前提で話を進めていきますね。
数値もオブジェクト?それってどういうこと?
まずは質問です。Javaでは以下のように書いた場合、int
型のx
は何者だと思いますか?
int x = 10;
おそらく「プリミティブ型(基本型)の整数だ」と思いますよね?
はい、Javaではint
はオブジェクトではなく、値そのものです。
でもPythonでは、次のように書くと…
x = 10
これ、x
は整数10を持つオブジェクトなんです!
オブジェクトって何?
オブジェクトとは、データ(値)とそのデータを扱うための機能(メソッド)をまとめたもののことです。
たとえばPythonでは、次のように書くことができます。
x = 10
print(x.bit_length()) # 結果: 4
この.bit_length()
は、整数が何ビットで表現できるかを教えてくれるメソッドです。
整数10
という値に、まるで文字列やリストのようにメソッドを呼び出していることに注目してください。
Javaのint
には、メソッドはついていませんよね?それが大きな違いです!
Javaとの比較:プリミティブ型 vs オブジェクト型
言語 | 型名 | オブジェクト? | メソッドを持つ? |
---|---|---|---|
Java | int | × | × |
Java | Integer | ○ | ○ |
Python | int | ○ | ○ |
Javaでは、int
はプリミティブ型ですが、Integer
クラスというラッパークラスを使えばオブジェクトとして扱えます。
Integer y = 10;
System.out.println(y.toString()); // OK!
つまり、Pythonの数値型は最初からJavaのInteger
のような振る舞いをするんです。
メリット:一貫した扱いやすさ
Pythonで数値がオブジェクトであることには、いくつかのメリットがあります。
1. どんな値でも同じように扱える
Pythonでは、文字列、リスト、辞書、整数、浮動小数点、すべてがオブジェクトです。だから、
print(len("hello"))
print(len([1, 2, 3]))
このように、同じ関数やメソッドを使っても、一貫して動くんです。直感的で覚えやすい!
2. オブジェクト指向と親和性が高い
すべてがオブジェクトなので、メソッドや属性に自由にアクセスできます。
オブジェクト指向プログラミング(OOP)を学ぶときも、スムーズに理解できます。
デメリットはある?
もちろんあります。
パフォーマンスの問題
Javaではint
はとても軽くて高速です。
でもPythonでは、整数ひとつでもオブジェクトとして管理されるため、内部的には重くなりがちです。
たとえば、Javaのfor
ループと比べて、Pythonのループは遅く感じることがあります。
まとめ:Pythonの「数値=オブジェクト」はどう活かす?
Pythonを使うときは、**「すべてがオブジェクト」**という考えを念頭に置いてください。
数値も文字列もリストも、同じように属性やメソッドを持ちます。
たとえば:
a = 42
print(type(a)) # <class 'int'>
print(a.real) # 実数部(整数でも使える)
print(a.bit_length()) # 必要なビット数
こういった使い方ができるのは、数値もクラスのインスタンスだからなんですね。
今後の学習のヒント
- Pythonのデータ型ごとのメソッドや属性を調べてみよう(
dir(10)
で一覧が見られます!) isinstance()
を使って、オブジェクトの型を調べてみようint
,float
,complex
などのPython標準型の実装を読んでみよう(公式ドキュメント参照)
Pythonは「シンプルなのに奥が深い」言語です。
Javaとの違いを意識しながら学ぶことで、より理解が深まりますよ。
では、次は「Pythonの変数と参照の仕組み」について学んでみましょう!おすすめですよ。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。