Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 727e4ed

Browse files
committed
Replace dataclass with SimpleNamespace.
Reduces import time by over 50% (10431µs vs 4350µs on Apple M3 Pro).
1 parent 8091be3 commit 727e4ed

1 file changed

Lines changed: 11 additions & 7 deletions

File tree

Lib/configparser.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,18 @@
143143
between keys and values are surrounded by spaces.
144144
"""
145145

146+
# Do not import dataclasses; overhead is unacceptable.
147+
146148
from collections.abc import Iterable, MutableMapping
147149
from collections import ChainMap as _ChainMap
148150
import contextlib
149-
from dataclasses import dataclass, field
150151
import functools
151152
import io
152153
import itertools
153154
import os
154155
import re
155156
import sys
157+
import types
156158

157159
__all__ = ("NoSectionError", "DuplicateOptionError", "DuplicateSectionError",
158160
"NoOptionError", "InterpolationError", "InterpolationDepthError",
@@ -537,19 +539,21 @@ def _interpolate_some(self, parser, option, accum, rest, section, map,
537539
"found: %r" % (rest,))
538540

539541

540-
@dataclass
541-
class _ReadState:
542-
elements_added : set[str] = field(default_factory=set)
542+
class _ReadState(types.SimpleNamespace):
543+
elements_added : set[str]
543544
cursect : dict[str, str] | None = None
544545
sectname : str | None = None
545546
optname : str | None = None
546547
lineno : int = 0
547548
indent_level : int = 0
548-
errors : list[ParsingError] = field(default_factory=list)
549+
errors : list[ParsingError]
550+
551+
def __init__(self):
552+
self.elements_added = set()
553+
self.errors = list()
549554

550555

551-
@dataclass
552-
class _Prefixes:
556+
class _Prefixes(types.SimpleNamespace):
553557
full : Iterable[str]
554558
inline : Iterable[str]
555559

0 commit comments

Comments
 (0)