dry-python / dry-python/lambdas

Implements `_.method()`

オープン
#46 コメント 3 件 リアクション 1 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
286
フォーク
6
PR マージ指標
30日以内にマージされた PR はありません

説明

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!

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。