Skip to content

Commit

Permalink
Notatka dotycząca dekoratorów
Browse files Browse the repository at this point in the history
  • Loading branch information
pktiuk committed Jan 10, 2025
1 parent cce7216 commit 9f5b8ca
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions docs/Python🐍/1_ogolne_notatki.md
Original file line number Diff line number Diff line change
Expand Up @@ -748,6 +748,7 @@ Funkcja dekorująca najczęściej przyjmuje funkcję dekorowaną i zwraca nową,
```python
#foo jest dekoratorem, który wzbogaci naszą funkcję
def foo(to_be_wrapped):
@wraps(to_be_wrapped) #(opcjonalne) dodanie tej linii pozwala na zachowanie oryginalnej nazwy funkcji oraz jej dokumentacji
def new_func(args,**kwargs):
print("uwaga, będzie sześcian")
return to_be_wrapped(*args,**kwargs) # warto je dodać aby argumenty zostały przekazane dalej do funkcji docelowej
Expand Down Expand Up @@ -782,6 +783,27 @@ class Myclass:
return token
```

Dekorator przyjmujący argumenty. Aby dekorator mógł przyjąć argumenty, musi być zdefiniowany jako funkcja, która zwraca dekorator.

```python
def retry(tries=4):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for i in range(tries):
try:
return func(*args, **kwargs)
except Exception as e:
print(f"Exception {e}, retrying")
return None
return wrapper
return decorator

@retry(5)
def download_file(url):
#kod
```

#### overload (przeciążanie funkcji)

W Pythonie możliwe jest także przeciążanie funkcji oraz metod. Można do tego celu użyć dekotarota [`@overload`](https://peps.python.org/pep-3124/).
Expand Down

0 comments on commit 9f5b8ca

Please sign in to comment.