Size: a a a

Сообщество Python Программистов

2021 February 01

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Очередной вопрос про нейминг


Есть декоратор, который после вызова оборачиваемой функции создаёт событие
В коде его использование выглядит так:

@emit_on_call(SomeEvent)
async def some_func(...):
   ...



Сам декоратор примерно такое делает

def emit_on_call(event):
   def decorator(coro):
       async def wrapped(*args, **kwargs):
           result = await coro(*args, **kwargs)
           await event.emit(*args, **kwargs)
           return result
       return wrapped
   return decorator



Собсна мне чота кажется что название emit_on_call какое-то невыразительное. Как бы назвать по красоте?
источник

А

Айван in Сообщество Python Программистов
А в std-либе есть что-нибудь подобное? 🤔
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Тут ещё отдельная херня с тем что он оборачивает хендлеры aiohttp, и вытягивать из Реквесты параметры каждый раз кажется ну таким себе занятием...
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Айван
А в std-либе есть что-нибудь подобное? 🤔
Чему подобное?)
источник

P

Paper_doll_96 in Сообщество Python Программистов
Каким образом декоратор dataclass пишется без скобок, если он может принимать аргументы?
источник

А

Айван in Сообщество Python Программистов
Ну, callback при вызове какой-то функции
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Айван
Ну, callback при вызове какой-то функции
Хз, чесгря
Я почему-то думаю что это делается через запиливание декоратора)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
Очередной вопрос про нейминг


Есть декоратор, который после вызова оборачиваемой функции создаёт событие
В коде его использование выглядит так:

@emit_on_call(SomeEvent)
async def some_func(...):
   ...



Сам декоратор примерно такое делает

def emit_on_call(event):
   def decorator(coro):
       async def wrapped(*args, **kwargs):
           result = await coro(*args, **kwargs)
           await event.emit(*args, **kwargs)
           return result
       return wrapped
   return decorator



Собсна мне чота кажется что название emit_on_call какое-то невыразительное. Как бы назвать по красоте?
Помогите Бензу назвать функцию🌚
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Paper_doll_96
Каким образом декоратор dataclass пишется без скобок, если он может принимать аргументы?
Ну он видимо проверяет что ему пришло и по ситуации разруливает)
источник

E

Egor in Сообщество Python Программистов
Вейт Скелетонов
Представь тебе надо вывести цифры ввиде рисунка можно каждую цифру поставить в словарь, как ключ, а у ключа будет значение(рисунок), ты можешь просто обращаться к этому ключу, выводить значение, которое у тебя находится под ключом и тебе будет выводится определённый рисунок
что?
не понял сути задачи что-то
источник

ВС

Вейт Скелетонов... in Сообщество Python Программистов
Egor
что?
не понял сути задачи что-то
1 выводит РИСУНОК большой цифры 1 и т.д....
источник

E

Egor in Сообщество Python Программистов
Вейт Скелетонов
1 выводит РИСУНОК большой цифры 1 и т.д....
ясно, понял
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Paper_doll_96
Каким образом декоратор dataclass пишется без скобок, если он может принимать аргументы?
Вот функция ниже умеет принимать как просто класс (для использования в качестве декоратора), так и аргументы для параметризации👌

def sample(*args, **kwargs):
   def dispatch(*args, **kwargs):
       def wrapper(cls):
           # some shit with
           # class cls
           #
           # args and kwargs
           # used here passes
           # from dispatch
           return cls
       return wrapper
   class_found = isinstance(args[0], type)
   if class_found:
       cls, *args = args
       return dispatch(*args, **kwargs)(cls)
   else:
       return dispatch(*args, **kwargs)



P.S. Это лютое говнище, написанное на коленке, и я почти уверен что можно красивее, но за пример сойдёт вполне))
источник

А

Айван in Сообщество Python Программистов
Paper_doll_96
Каким образом декоратор dataclass пишется без скобок, если он может принимать аргументы?
Вот его параметры (из help'a):
dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
Скорее всего проверяет, чему равен cls и потом делает какую-то магию
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Айван
Вот его параметры (из help'a):
dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
Скорее всего проверяет, чему равен cls и потом делает какую-то магию
Пример того как это может происходить я тащемта скинул выше)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Айван
Вот его параметры (из help'a):
dataclass(cls=None, /, *, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
Скорее всего проверяет, чему равен cls и потом делает какую-то магию
А, ебать, у него все параметры именованные, только класс позиционный!
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Там ваще изи же!)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
Там ваще изи же!)
Вот так

def sample(cls=None, /, *, **kwargs):
   def dispatch(**kwargs):
       def wrapper(cls):
           # some shit with
           # class cls
           #
           # args and kwargs
           # used here passes
           # from dispatch
           return cls
       return wrapper
   dispatched = dispatch(**kwargs)
   if not cls:
       return dispatched
   return dispatched(cls)
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Бензофуран Гетероцикл
Вот так

def sample(cls=None, /, *, **kwargs):
   def dispatch(**kwargs):
       def wrapper(cls):
           # some shit with
           # class cls
           #
           # args and kwargs
           # used here passes
           # from dispatch
           return cls
       return wrapper
   dispatched = dispatch(**kwargs)
   if not cls:
       return dispatched
   return dispatched(cls)
При том диспатчер может быть и не внутри определён, а где-то в глобалспейсе
источник

БГ

Бензофуран Гетероцик... in Сообщество Python Программистов
Блед, ну кто с неймингом-то поможет?((
источник