Pythonには C言語のような直接的な構造体は存在しませんが、似たような機能を実現する方法がいくつか用意されています。本記事では、Pythonで構造体のような機能を実現する主要な2つの方法、dataclassとstructモジュールについて詳しく解説します。
Python 3.7から導入されたdataclassは、構造体のようなデータ構造を簡潔に定義できる強力なツールです。
from dataclasses import dataclass
@dataclass
class Product:
name: str
price: float = 0.0 # デフォルト値を設定
quantity: int = 1
product1 = Product("リンゴ", 150.0, 10)
print(product1) # Product(name='リンゴ', price=150.0, quantity=10)
dataclassを使用すると、__init__メソッドを自動で生成してくれるため、コードがシンプルになります。
@dataclassデコレータには以下のような利点があります:
@dataclass
class Order:
product: Product
order_id: int
status: str = "未発送" # デフォルト値を設定
structモジュールは、バイナリデータの操作に特化しており、C言語の構造体に非常に近い操作が可能です。
import struct
# 整数と浮動小数点数をバイト列にパック
packed_data = struct.pack('if', 1024, 3.14)
print(packed_data) # b'\x00\x04\x00\x00\xc3\xf5H@'
# バイト列をアンパック
unpacked_data = struct.unpack('if', packed_data)
print(unpacked_data) # (1024, 3.140000104904175)
structモジュールは、ネットワーク通信やバイナリファイルの操作に特に有用です。
クラスを使用することで、より柔軟な構造体の代替を実現できます。
class Student:
def __init__(self, name, id, score):
self.name = name
self.id = id
self.score = score
student1 = Student("鈴木一郎", "A001", 85)
print(f"名前: {student1.name}, ID: {student1.id}, 点数: {student1.score}")
クラスを使用すると、メソッドを追加することでデータ操作も可能になります。
以下の表で、各方法の使用用途を比較します。
方法 | 主な使用用途 |
---|---|
dataclass | 単純なデータ構造の定義、データ管理 |
struct | バイナリデータの操作、ネットワーク通信、ファイル処理 |
クラス | 複雑なデータ構造、メソッドを含むデータ操作 |
Pythonでは、dataclass、struct、クラスを使用することで、構造体のような機能を実現できます。dataclassは簡潔なコードでデータ構造を定義でき、自動的に必要なメソッドも生成してくれます。structはバイナリデータの操作に適しており、高度な制御が可能です。クラスを使用すれば、より柔軟なデータ構造とメソッドの定義が可能です。用途に応じて適切な方法を選択することで、効率的なデータ管理と操作が可能になります。