Skip to content

Commit

Permalink
refactor: Only loop once on "cached_properties" when building slotted…
Browse files Browse the repository at this point in the history
… classes (#1290)

Only loop once on "cached_properties" when building slotted classes

Previously the cached_properties dict was read three times.

Co-authored-by: Hynek Schlawack <[email protected]>
  • Loading branch information
dlax and hynek authored Jun 26, 2024
1 parent b393d79 commit e1b2c94
Showing 1 changed file with 5 additions and 11 deletions.
16 changes: 5 additions & 11 deletions src/attr/_make.py
Original file line number Diff line number Diff line change
Expand Up @@ -931,19 +931,13 @@ def _create_slots_class(self):
# To know to update them.
additional_closure_functions_to_update = []
if cached_properties:
# Add cached properties to names for slotting.
names += tuple(cached_properties.keys())

for name in cached_properties:
# Clear out function from class to avoid clashing.
del cd[name]

additional_closure_functions_to_update.extend(
cached_properties.values()
)

class_annotations = _get_annotations(self._cls)
for name, func in cached_properties.items():
# Add cached properties to names for slotting.
names += (name,)
# Clear out function from class to avoid clashing.
del cd[name]
additional_closure_functions_to_update.append(func)
annotation = inspect.signature(func).return_annotation
if annotation is not inspect.Parameter.empty:
class_annotations[name] = annotation
Expand Down

0 comments on commit e1b2c94

Please sign in to comment.