Skip to content

v2.12 no longer supports ABC Union #12230

@DKingAlpha

Description

@DKingAlpha

Initial Checks

  • I confirm that I'm using Pydantic V2

Description

The following code no longer works in 2.12.0a1

For real world use case see microsoft/autogen#6889 (comment)

Example Code

from pydantic import BaseModel
from abc import ABC, abstractmethod

class ABC_1(BaseModel, ABC):
    @abstractmethod
    def do_something(self):
        pass

class ABC_2(BaseModel, ABC):
    @abstractmethod
    def do_something_else(self):
        pass

class A1(ABC_1):
    def do_something(self):
        print("Doing something in A1")

class A2(ABC_2):
    def do_something_else(self):
        print("Doing something else in A2")

class X(BaseModel):
    x: ABC_1 | ABC_2

a1 = A1()
a2 = A2()

x1 = X(x=a1)
x2 = X(x=a2)

Python, Pydantic & OS Version

pydantic version: 2.12.0a1
        pydantic-core version: 2.37.2
          pydantic-core build: profile=release pgo=false
               python version: 3.13.5 (main, Jun 21 2025, 09:35:00) [GCC 15.1.1 20250425]
                     platform: Linux-6.15.7-arch1-1-x86_64-with-glibc2.41
             related packages: typing_extensions-4.14.1 pydantic-extra-types-2.10.5 pydantic-extra-types-2.10.4 pydantic-settings-2.10.1 typing_extensions-4.14.1 fastapi-0.116.1
                       commit: unknown

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug V2Bug related to Pydantic V2pendingIs unconfirmed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions