Basic Usage¶
This guide covers the basic usage of Serilux.
Creating Serializable Classes¶
To create a serializable class, inherit from Serializable and use the
@register_serializable decorator:
from serilux import Serializable, register_serializable
@register_serializable
class MyClass(Serializable):
def __init__(self):
super().__init__()
self.field1 = ""
self.field2 = 0
self.add_serializable_fields(["field1", "field2"])
Class Name Conflict Detection¶
The @register_serializable decorator automatically detects and prevents class name conflicts.
If you try to register a different class with the same name as an already registered class,
a ValueError will be raised:
@register_serializable
class MyClass(Serializable):
def __init__(self):
super().__init__()
self.field1 = ""
self.add_serializable_fields(["field1"])
# This will raise ValueError: Class name conflict
@register_serializable
class MyClass(Serializable): # Different class, same name
def __init__(self):
super().__init__()
self.field2 = "" # Different field
self.add_serializable_fields(["field2"])
Why This Matters:
Prevents accidental class name collisions that could lead to incorrect deserialization
Ensures that deserialization always uses the correct class definition
Helps catch bugs early during development
Re-registering the Same Class:
Re-registering the same class object is allowed (idempotent operation):
@register_serializable
class MyClass(Serializable):
def __init__(self):
super().__init__()
self.field1 = ""
self.add_serializable_fields(["field1"])
# Re-registering the same class is allowed
from serilux.serializable import SerializableRegistry
SerializableRegistry.register_class("MyClass", MyClass) # OK
Registering Fields¶
Use add_serializable_fields() to specify which fields should be serialized:
obj.add_serializable_fields(["field1", "field2", "field3"])
You can also remove fields:
obj.remove_serializable_fields(["field2"])
Serialization¶
Serialize an object to a dictionary:
data = obj.serialize()
# Returns: {'_type': 'MyClass', 'field1': 'value1', 'field2': 42}
Deserialization¶
Deserialize from a dictionary:
new_obj = MyClass()
new_obj.deserialize(data)
Strict Mode¶
Enable strict mode to raise errors for unknown fields:
obj.deserialize(data, strict=True)