More Convenient Way to Define Struct-like Classes in Python

How can I define a python struct similar to C-like structures? I’m tired of writing code like this: class MyStruct(): def init(self, field1, field2, field3): self.field1 = field1 self.field2 = field2 self.field3 = field3

Is there a more convenient way to define a structure in Python?

I’ve been down this road before! If you want something straightforward and efficient, try using collections.namedtuple. It’s a lightweight way to create a class with named fields and is immutable by default. Here’s how:

from collections import namedtuple

MyStruct = namedtuple('MyStruct', ['field1', 'field2', 'field3'])
my_struct = MyStruct(field1=1, field2=2, field3=3)

This approach simplifies your code and is perfect for when you need a simple, read-only python struct!

I agree that namedtuple is great for lightweight cases! But if you need more flexibility (e.g., mutability or additional methods), Python’s dataclasses module is an even better option. It automates the creation of __init__, __repr__, and more while allowing you to define type hints.

from dataclasses import dataclass

@dataclass
class MyStruct:
    field1: int
    field2: int
    field3: int

my_struct = MyStruct(1, 2, 3)

This approach is clean and expressive, making it ideal when working with more complex python struct-like use cases.

Those are excellent options for many use cases! However, if you’re handling packed binary data (e.g., for interfacing with C or networking), struct.Struct might be the tool you need. It replicates the functionality of a C struct by encoding data into fixed-size binary formats.

import struct

MyStruct = struct.Struct('iii')  # 'i' means integer
packed_data = MyStruct.pack(1, 2, 3)
unpacked_data = MyStruct.unpack(packed_data)

This is the go-to method for low-level operations or when your python struct must directly align with binary layouts.