diff --git a/changes/4576-dolfinus.md b/changes/4576-dolfinus.md new file mode 100644 index 0000000000..d2408516ea --- /dev/null +++ b/changes/4576-dolfinus.md @@ -0,0 +1 @@ +Fix `@pydantic.dataclasses.dataclass()` syntax failure on inheriting dataclass without changing fields list \ No newline at end of file diff --git a/pydantic/dataclasses.py b/pydantic/dataclasses.py index 9a72533bd7..bf13786ece 100644 --- a/pydantic/dataclasses.py +++ b/pydantic/dataclasses.py @@ -197,7 +197,7 @@ def dataclass( def wrap(cls: Type[Any]) -> 'DataclassClassOrWrapper': import dataclasses - if is_builtin_dataclass(cls) and _extra_dc_args(_cls) == _extra_dc_args(_cls.__bases__[0]): # type: ignore + if is_builtin_dataclass(cls) and _extra_dc_args(cls) == _extra_dc_args(cls.__bases__[0]): dc_cls_doc = '' dc_cls = DataclassProxy(cls) default_validate_on_init = False diff --git a/tests/test_dataclasses.py b/tests/test_dataclasses.py index e2027476bc..329dacbe5a 100644 --- a/tests/test_dataclasses.py +++ b/tests/test_dataclasses.py @@ -1472,3 +1472,26 @@ def __post_init__(self): self.a *= 3 assert C().a == 6 # 1 * 3 + 3 + + +def test_issue_4565(): + @dataclasses.dataclass + class A: + a: int = 1 + + # both @decorator and @decorator() syntax shold be okay + @pydantic.dataclasses.dataclass + class B(A): + b: int = 2 + + @pydantic.dataclasses.dataclass + class C(A): + ... + + @pydantic.dataclasses.dataclass() + class BB(A): + bb: int = 2 + + @pydantic.dataclasses.dataclass() + class CC(A): + ...