W Pythonie dekoratory to funkcje, które w wygodny sposób zmieniają funkcje, metody lub klasy przy użyciu specjalnej składni. Dekoratory dynamicznie zmieniają funkcjonalność bez zmiany dekorowanego kodu źródłowego.
Jak mogę zrobić dwa dekoratory w Pythonie, które wykonałyby następujące czynności? @makebold @makeitalic def say(): return "Hello" ... które powinny zwrócić: "<b><i>Hello</i></b>" Nie próbuję HTMLtego zrobić w prawdziwej aplikacji - po prostu próbuję zrozumieć, jak działają dekoratorzy i łączenie dekoratorów.
Chciałbym zrozumieć, jak propertydziała funkcja wbudowana . To, co mnie dezorientuje, to fakt, że propertymożna go również używać jako dekoratora, ale wymaga tylko argumentów, gdy jest używany jako funkcja wbudowana, a nie jako dekorator. Ten przykład pochodzi z dokumentacji : class C(object): def __init__(self): self._x = None def getx(self): return …
Patrzę na jakiś kod Pythona, który używał tego @symbolu, ale nie mam pojęcia, co on robi. Nie wiem też, czego szukać, ponieważ wyszukiwanie dokumentów w języku Python lub Google nie zwraca odpowiednich wyników, gdy ten @symbol jest dołączony.
Widzę takie wzory def __init__(self, x, y, z): ... self.x = x self.y = y self.z = z ... dość często, często z dużo większą liczbą parametrów. Czy istnieje dobry sposób na uniknięcie tego typu żmudnej powtarzalności? Czy namedtuplezamiast tego klasa powinna dziedziczyć ?
Jak przekazać pole klasy do dekoratora w metodzie klasy jako argument? To, co chcę zrobić, to coś takiego: class Client(object): def __init__(self, url): self.url = url @check_authorization("some_attr", self.url) def get(self): do_work() Narzeka, że jaźń nie istnieje do przekazania self.urldekoratorowi. Czy jest na to sposób?
Interesuje mnie, jak używać @propertyw Pythonie. Przeczytałem dokumentację Pythona, a przykład tam, moim zdaniem, to tylko kod zabawki: class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x Nie wiem, jakie korzyści …
Mam dekoratora jak poniżej. def myDecorator(test_func): return callSomeWrapper(test_func) def callSomeWrapper(test_func): return test_func @myDecorator def someFunc(): print 'hello' Chcę ulepszyć ten dekorator, aby zaakceptował inny argument, jak poniżej def myDecorator(test_func,logIt): if logIt: print "Calling Function: " + test_func.__name__ return callSomeWrapper(test_func) @myDecorator(False) def someFunc(): print 'Hello' Ale ten kod daje błąd, TypeError: …
def make_bold(fn): return lambda : "<b>" + fn() + "</b>" def make_italic(fn): return lambda : "<i>" + fn() + "</i>" @make_bold @make_italic def hello(): return "hello world" helloHTML = hello() Wynik: "<b><i>hello world</i></b>" Z grubsza rozumiem o dekoratorach i jak to działa z jednym z nich w większości przykładów. W …
Chciałbym wiedzieć, czy można kontrolować definicję funkcji Pythona w oparciu o ustawienia globalne (np. System operacyjny). Przykład: @linux def my_callback(*args, **kwargs): print("Doing something @ Linux") return @windows def my_callback(*args, **kwargs): print("Doing something @ Windows") return Następnie, jeśli ktoś używa Linuksa, zostanie zastosowana pierwsza definicja, my_callbacka druga zostanie po cichu zignorowana. …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.