Запитання з тегом «python-decorators»

У Python декоратори - це функції, які зручно змінюють функції, методи або класи за допомогою спеціального синтаксису. Декоратори динамічно змінюють функціональність, не змінюючи декорований вихідний код.


17
Як зробити ланцюжок декораторів функції?
Як я можу зробити двох декораторів на Python, які б зробили наступне? @makebold @makeitalic def say(): return "Hello" ... що має повернутись: "<b><i>Hello</i></b>" Я не намагаюся зробити HTMLцей шлях справжнім додатком - просто намагаюся зрозуміти, як працюють декоратори та ланцюги декораторів.

14
Як працює декоратор @property?
Я хотів би зрозуміти, як працює вбудована функція property. Що мене бентежить, це те, що він propertyтакож може бути використаний як декоратор, але він бере аргументи лише тоді, коли використовується як вбудована функція, а не коли використовується як декоратор. Цей приклад із документації : class C(object): def __init__(self): self._x = …

12
Що робить символ "at" (@) у Python?
Я дивлюся на якийсь код Python, який використовував цей @символ, але поняття не маю, що він робить. Я також не знаю, що шукати, оскільки пошук в документах Python або Google не повертають відповідних результатів, коли @символ включений.

11
Як я уникаю “self.x = x; self.y = y; self.z = z ”шаблон у __init__?
Я бачу подібні зразки def __init__(self, x, y, z): ... self.x = x self.y = y self.z = z ... досить часто, часто з набагато більшими параметрами. Чи є хороший спосіб уникнути такого виснажливого повторення? Чи повинен наслідувати клас namedtupleзамість цього?

5
Декоратор класового методу з аргументами самості?
Як я можу передати поле класу декоратору методом класу як аргумент? Я хочу зробити щось на зразок: class Client(object): def __init__(self, url): self.url = url @check_authorization("some_attr", self.url) def get(self): do_work() Він скаржиться, що самості не існує для переходу self.urlдо декоратора. Чи є шлях до цього?

10
Приклад реального світу про те, як використовувати властивість властивості в python?
Мене цікавить, як користуватися @propertyPython. Я прочитав документи python, і приклад, на мою думку, - це лише іграшковий код: 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 Я не знаю, …

5
Як передати додаткові аргументи декоратору Python?
У мене є декоратор, як показано нижче. def myDecorator(test_func): return callSomeWrapper(test_func) def callSomeWrapper(test_func): return test_func @myDecorator def someFunc(): print 'hello' Я хочу вдосконалити цей декоратор, щоб прийняти ще один аргумент, як показано нижче def myDecorator(test_func,logIt): if logIt: print "Calling Function: " + test_func.__name__ return callSomeWrapper(test_func) @myDecorator(False) def someFunc(): print 'Hello' …

1
Замовлення на виконання декоратора
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() Вихід: "<b><i>hello world</i></b>" Я приблизно розумію декоратори та те, як це працює з одним із них у більшості прикладів. У …

5
Як обійти визначення функції python за допомогою декоратора?
Я хотів би знати, чи можливо контролювати визначення функції Python на основі глобальних налаштувань (наприклад, ОС). Приклад: @linux def my_callback(*args, **kwargs): print("Doing something @ Linux") return @windows def my_callback(*args, **kwargs): print("Doing something @ Windows") return Тоді, якщо хтось використовує Linux, перше визначення my_callback буде використано , а друге буде мовчки …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.