From 8c0beadcf093823ab28a065a41c3c540a72b81b4 Mon Sep 17 00:00:00 2001 From: Shumpei Shiina Date: Fri, 24 Jan 2025 00:45:17 +0900 Subject: [PATCH 1/2] Add missing evaluate() to multidispatch.__call__() --- multimethod/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/multimethod/__init__.py b/multimethod/__init__.py index 3cd6531..a71a9cd 100644 --- a/multimethod/__init__.py +++ b/multimethod/__init__.py @@ -400,6 +400,7 @@ def __setitem__(self, types: tuple, func: Callable): def __call__(self, *args: Any, **kwargs: Any) -> RETURN: """Resolve and dispatch to best method.""" + self.evaluate() params = args if kwargs: for signature in self.signatures.values(): # pragma: no branch From b64ae799402013f09277f0475dae993ef8c417c3 Mon Sep 17 00:00:00 2001 From: Shumpei Shiina Date: Fri, 24 Jan 2025 20:03:21 +0900 Subject: [PATCH 2/2] move evaluate() from __call__() to dispatch() --- multimethod/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/multimethod/__init__.py b/multimethod/__init__.py index a71a9cd..d8e253d 100644 --- a/multimethod/__init__.py +++ b/multimethod/__init__.py @@ -334,6 +334,7 @@ def __missing__(self, types: tuple) -> Callable: return self.setdefault(types, self.select(types, self.parents(types))) def dispatch(self, *args) -> Callable: + self.evaluate() types = tuple(map(type, args)) if not any(map(issubclass, types, self.generics)): return self[types] @@ -343,7 +344,6 @@ def dispatch(self, *args) -> Callable: def __call__(self, *args, **kwargs): """Resolve and dispatch to best method.""" - self.evaluate() func = self.dispatch(*args) try: return func(*args, **kwargs) @@ -400,7 +400,6 @@ def __setitem__(self, types: tuple, func: Callable): def __call__(self, *args: Any, **kwargs: Any) -> RETURN: """Resolve and dispatch to best method.""" - self.evaluate() params = args if kwargs: for signature in self.signatures.values(): # pragma: no branch