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らしいコード が書けるようになります。
ぜひ、実際にコードを書いて試してみてください! 🚀