Skip to content

Commit b32392d

Browse files
authored
Avro: Replace manual slots with dataclass slots (#4091)
Use slots=True for ListReader and MapReader instead of manually declaring __slots__. Preserve the original dataclass fields and use two-argument super() for compatibility with slotted dataclasses. Internal cached attributes now use the inherited instance dictionary instead of dedicated slots. Refs #4086
1 parent 0a536e4 commit b32392d

1 file changed

Lines changed: 4 additions & 6 deletions

File tree

‎pyiceberg/avro/reader.py‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -380,13 +380,12 @@ def __hash__(self) -> int:
380380
return self._hash
381381

382382

383-
@dataclass(frozen=False, init=False)
383+
@dataclass(frozen=False, init=False, slots=True)
384384
class ListReader(Reader):
385-
__slots__ = ("element", "_is_int_list", "_hash")
386385
element: Reader
387386

388387
def __init__(self, element: Reader) -> None:
389-
super().__init__()
388+
super(ListReader, self).__init__()
390389
self.element = element
391390
self._hash = hash(self.element)
392391
self._is_int_list = isinstance(self.element, IntegerReader)
@@ -418,14 +417,13 @@ def __hash__(self) -> int:
418417
EMPTY_DICT: dict[Any, Any] = {}
419418

420419

421-
@dataclass(frozen=False, init=False)
420+
@dataclass(frozen=False, init=False, slots=True)
422421
class MapReader(Reader):
423-
__slots__ = ("key", "value", "_is_int_int", "_is_int_bytes", "_key_reader", "_value_reader", "_hash")
424422
key: Reader
425423
value: Reader
426424

427425
def __init__(self, key: Reader, value: Reader) -> None:
428-
super().__init__()
426+
super(MapReader, self).__init__()
429427
self.key = key
430428
self.value = value
431429
if isinstance(self.key, IntegerReader):

0 commit comments

Comments
 (0)