from dataclasses import dataclass, asdict
@dataclass
class Unionable:
def __or__(self, other):
return self.__class__(**asdict(self) | asdict(other))
@dataclass
class A(Unionable):
x: int
y: int
@dataclass
class B(Unionable):
x: int
a = A(x=2, y=6)
b = B(x=4)
print(a | b)
ZnJvbSBkYXRhY2xhc3NlcyBpbXBvcnQgZGF0YWNsYXNzLCBhc2RpY3QKCkBkYXRhY2xhc3MKY2xhc3MgVW5pb25hYmxlOgogICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKCoqYXNkaWN0KHNlbGYpIHwgYXNkaWN0KG90aGVyKSkKCkBkYXRhY2xhc3MKY2xhc3MgQShVbmlvbmFibGUpOgogICAgeDogaW50CiAgICB5OiBpbnQKCkBkYXRhY2xhc3MKY2xhc3MgQihVbmlvbmFibGUpOgogICAgeDogaW50CgphID0gQSh4PTIsIHk9NikKYiA9IEIoeD00KQpwcmludChhIHwgYik=