Skip to content

Unexpected inheritance behavior #805

Open
@RoTorEx

Description

@RoTorEx

Description

Hi there,

Why doesn't it work as imagined, especially in the second stage?

from datetime import datetime

import msgspec


element = {
    "id_": 1,
    "name": "Google",
    "country": "Finland",
    "description": None,
    "created_at": datetime(2025, 1, 20, 12, 28, 55),
    "updated_at": datetime(2025, 1, 20, 18, 58, 42),
}


# Stage ONE
class _FooOne(msgspec.Struct):
    id_: int
    created_at: datetime
    updated_at: datetime


class _BarOne(msgspec.Struct):
    name: str
    country: str
    description: str | None


# class SchemaOne(msgspec.Struct, _FooOne, _BarOne):  # ! TypeError
#     pass


# Stage TWO
class _FooTwo:
    id_: int
    created_at: datetime
    updated_at: datetime


class _BarTwo:
    name: str
    country: str
    description: str | None


class SchemaTwo(_FooTwo, _BarTwo, msgspec.Struct):
    pass


# Stage THREE
class _FooThree(msgspec.Struct):
    id_: int
    created_at: datetime
    updated_at: datetime


class _BarThree(_FooThree):
    name: str
    country: str
    description: str | None


class SchemaThree(_BarThree):
    pass


print(msgspec.convert(element, type=SchemaTwo))  # ! Empty
print(msgspec.convert(element, type=SchemaThree))  # ! Ok

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions