Pydantic dataclasses: Is it possible to use inheritance with default fields

I am trying to use pydantic frozen dataclasses to create stable and validated data structures. In the process, it seemed like my code would benefit from using inheritance because a lot of methods were shared between multiple objects.

My question is the following, is there a way to use inheritance to define a parent class that has default fields, while the child class includes non-default ones. Using dataclass(frozen=True) is important to ensure easy serialisation.

The example is the following, I’m creating a parent class A and a child B. A has both default and non-default arguments. The main interest here is having the field A.y that is initialised by the validator using other fields that already passed validation. B requires initialisation of non-default fields.

Note that there are in reality multiple child classes that also share methods with A, that part not causing any issue with pydantic.

from pydantic import field_validator, Field, ValidationInfo
from pydantic.dataclasses import dataclass

@dataclass(frozen=True)
class A:
    x: int
    y: int = Field(default=0, init=False, validate_default=True, repr=False)

    @field_validator("x")
    def validate_x(cls, x):
        if x < 0:
            raise ValueError("x must be non-negative")
        return x

    @field_validator("y", mode="after")
    def validate_y(cls, y, info=ValidationInfo):
        y = info.data["x"] + 1
        return y
    
@dataclass(frozen=True)
class B(A):
    name: str
    z: int = Field(default=0, init=False, validate_default=True, repr=False)

    @field_validator("z")
    def validate_z(cls, z, info=ValidationInfo):
        z = info.data["x"] + info.data["y"]
        return z
    
b = B(x=1, name="name")
print(b)

This returns the following error,

Traceback (most recent call last):
  File "/Users/.../new_file.py", line 21, in <module>
    class B(A):
  File "/opt/miniconda3/envs/qcd/lib/python3.10/site-packages/pydantic/dataclasses.py", line 225, in create_dataclass
    cls = dataclasses.dataclass(  # type: ignore[call-overload]
  File "/opt/miniconda3/envs/qcd/lib/python3.10/dataclasses.py", line 1184, in dataclass
    return wrap(cls)
  File "/opt/miniconda3/envs/qcd/lib/python3.10/dataclasses.py", line 1175, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash,
  File "/opt/miniconda3/envs/qcd/lib/python3.10/dataclasses.py", line 1024, in _process_class
    _init_fn(all_init_fields,
  File "/opt/miniconda3/envs/qcd/lib/python3.10/dataclasses.py", line 544, in _init_fn
    raise TypeError(f'non-default argument {f.name!r} '
TypeError: non-default argument 'name' follows default argument

which I guess is a default python error raised because pydantic automatic __init__ puts arguments in order and a default argument is written before a non-default one.

My main issue until now is that I can’t assign new fields after validation, and hopefully I can also avoid writing validators for each child.

Is there a way to circumvent this issue?

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật