Pythonのデータモデルをハンズオンで学ぼう!3

当サイトではアフィリエイト広告を利用しています。

リファレンス

Pythonを使っていると、クラスやオブジェクトを作成する機会が多いですよね。でも、Pythonのオブジェクトがどのように動作するのか、しっかり理解していますか?

今回は、Pythonの データモデル(Data Model)ハンズオン形式 で解説していきます。Pythonのデータモデルを理解すると、クラス設計がより直感的になり、Pythonらしいコードを書けるようになります!


🔹 ハンズオン 1: 「すべてのデータはオブジェクト」

Pythonでは、数値、文字列、リスト、辞書など、すべてのデータが オブジェクト です。

💻 実践

まずは type() を使って、すべてのデータがオブジェクトであることを確認してみましょう。

print(type(10))         # <class 'int'>
print(type("hello"))    # <class 'str'>
print(type([1, 2, 3]))  # <class 'list'>
print(type({"key": "value"}))  # <class 'dict'>
print(type(lambda x: x)) # <class 'function'>

✅ まとめ

  • Pythonでは すべてのデータ が「オブジェクト」
  • 各オブジェクトは クラス(型) を持っている

🔹 ハンズオン 2: 「オブジェクトを作る」

オブジェクトは クラス から作られます。では、自分でクラスを定義して、オブジェクトを作成してみましょう。

💻 実践

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person1 = Person("Alice", 25)
print(person1.name)  # Alice
print(person1.age)   # 25

✅ まとめ

  • class を使ってオブジェクトの 設計図 を作成できる
  • __init__コンストラクタ で、オブジェクト生成時に実行される

🔹 ハンズオン 3: 「Pythonの特殊メソッドとは?」

Pythonでは __str__ などの 特殊メソッド を定義することで、オブジェクトの動作をカスタマイズできます。

💻 実践

例えば、__str__ を使うと print(オブジェクト) の出力を変更できます。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"名前: {self.name}, 年齢: {self.age}"

person1 = Person("Alice", 25)
print(person1)  # 名前: Alice, 年齢: 25

✅ まとめ

  • __str__ を定義すると print(オブジェクト)見やすい文字列 を出力できる

🔹 ハンズオン 4: 「演算子のオーバーロード」

+- などの演算子を カスタムクラス に適用できるようにできます!

💻 実践

例えば、__add__ を定義すると + 演算子をカスタマイズできます。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)

    def __str__(self):
        return f"Point({self.x}, {self.y})"

p1 = Point(1, 2)
p2 = Point(3, 4)
result = p1 + p2
print(result)  # Point(4, 6)

✅ まとめ

  • __add__ を定義すると、+ 演算子でオブジェクトを 加算 できる

🔹 ハンズオン 5: 「リストのように振る舞うクラス」

__getitem__ を使うと、オブジェクトをリストのように扱えます。

💻 実践

class MyList:
    def __init__(self, items):
        self.items = items

    def __getitem__(self, index):
        return self.items[index]

    def __len__(self):
        return len(self.items)

my_list = MyList([10, 20, 30])
print(my_list[1])  # 20
print(len(my_list)) # 3

✅ まとめ

  • __getitem__obj[index] のように リスト風のアクセス ができる
  • __len__len(obj) を使えるようになる

🔹 ハンズオン 6: 「with文を使えるオブジェクト」

with 文でオブジェクトを使えるようにするには、__enter____exit__ を定義します。

💻 実践

class FileManager:
    def __init__(self, filename):
        self.filename = filename

    def __enter__(self):
        self.file = open(self.filename, 'w')
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        self.file.close()

with FileManager("test.txt") as f:
    f.write("Hello, world!")

# ファイルは自動的にクローズされる

✅ まとめ

  • __enter__ でオブジェクトを初期化し、__exit__後処理 を行う
  • with 文を使うと、リソースの後始末を自動化できる

🔹 まとめ

Pythonのデータモデルを理解すると、オブジェクトの振る舞いを 自由にカスタマイズ できます!

機能 特殊メソッド
文字列表現 __str__ print(obj)
加算演算子 __add__ obj1 + obj2
リストのようなアクセス __getitem__ obj[index]
コンテキストマネージャ __enter__, __exit__ with obj as x:

Pythonのデータモデルを活用すると、より 直感的でPythonらしいコード が書けるようになります。
ぜひ、実際にコードを書いて試してみてください! 🚀