dry-python / dry-python/lambdas
Implements `_.method()`
- Vorherrschende Sprache
- Python
- Sterne
- 286
- Forks
- 6
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
I'm opening this issue to discuss the possible ways to implement `_.method()`
Currently, we have this implementation:
```python
class _Callable(object):
def __getattr__(
self,
key: str,
) -> Callable[[_LambdaDynamicProtocol[T1]], T1]:
return operator.attrgetter(key)
```
The problem here is that we return the _operator_ directly:
```python
>>> from lambdas import _
>>> _.method
operator.attrgetter('method')
>>> _.method()
Traceback (most recent call last):
File "", line 1, in
TypeError: attrgetter expected 1 arguments, got 0
```
---
My idea is to create an intermediated class like `_MathExpression`:
```python
class Attr: # Just ignore the name for now
def __init__(self, attr: str) -> None:
self._attrgetter = operator.attrgetter(attr)
def __call__(self, *args, **kwargs) -> Any:
if len(args) == 1:
return self._attrgetter(args[0])
return lambda obj: self._attrgetter(obj)(*args, **kwargs)
```
This implementation has a limitation, they won't work correctly if we try to call a method with one argument. This is hard because we don't know when the attribute is callable!
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.