DaftAcademy / daftacademy-python_levelup-spring2020

20 stars 10 forks source link

HM2 Zad. 1 #13

Closed anyush closed 4 years ago

anyush commented 4 years ago

Proszę o wyjaśnienie, co musi robić dekorator wraps bez żadnych argumentów, który musimy napisać.

Ja rozumiem, jak działa taka konstrukcja: ... @wraps(f) def inner1(*args, *kwargs): ... Ale co musi robić taka: ... @wraps def inner2(args, **kwargs): ... ? Jeżeli w pierwszym przypadku np. inner1.name == f.name, to czemu musi być równe inner2.name? Jakim imieniem jego podmieniać? Dodam jeszcze, że to zadanie może być rozwiązane w bardzo dziwny (bo jest po-pierwsze za łatwy, a po drugie znika jakikolwiek sens użycia tego dekoratora) sposób.

anyush commented 4 years ago

GitHub ukrył podłogi, oczywiście, że tam jest nie "name", tylko <dwie podłogi>name<dwie podłogi>

mateusz94 commented 4 years ago

wraps powinien robić to samo co ten z biblioteki standardowej. Powinien przepisywać część atrybutów metod, żeby nie tracić informacji o tym co jest wywołane.

anyush commented 4 years ago

wraps powinien robić to samo co ten z biblioteki standardowej. Powinien przepisywać część atrybutów metod, żeby nie tracić informacji o tym co jest wywołane.

Ten z biblioteki standardowej bierze w nawiasach argument - funkcję, skąd musi przepisywać atrybuty (@wraps(funkcja) - te nawiasy z funkcją są obowiązkowe, ale w przykładzie ich nie ma). Dlatego ponawiam pytanie: w tym drugim przypadku z początku dyskusji skąd atrybuty muszą być przepisywane do inner2, gdyż tego argumentu nie ma?

mateusz94 commented 4 years ago

w drugim przypadku powinien przepisać atrybuty inner2

anyush commented 4 years ago

Okej, już nie znam jak jeszcze to wytłumaczyć. Dołączam kod , który robi dokładnie to samo, co functools.wraps dla tych kilku atrybutów. Testów to nie przechodzi, co więcej, przy uruchomieniu przykładu z repl.it za pomocą samego functools.wraps, assert wyrzuca błąd.

def wraps(f_attrs_from): ....def real_decor(f_to_decorate): ........# zdaję sobie sprawę, że f_to_decorate - zmienna lokalna ........f_to_decorate.name = f_attrs_from.name ........f_to_decorate.module = f_attrs_from.module ........f_to_decorate.doc = f_attrs_from.doc ........f_to_decorate.qualname = f_attrs_from.qualname ........f_to_decorate.annotations = f_attrs_from.annotations ........return f_to_decorate ....return real_decor

mateusz94 commented 4 years ago

Pełna zgoda!

naboru commented 4 years ago

Brawa za czujność. Mati wprowadz fixa do zadania :)

mateusz94 commented 4 years ago

Wprowadzone. Poprzednio nadesłane rozwiązania zostały usunięte.