Как добавить методы в замороженный/предварительно скомпилированный модульPython

Программы на Python
Anonymous
Как добавить методы в замороженный/предварительно скомпилированный модуль

Сообщение Anonymous »

В микропитоне многие очень полезные вещи, которые вы найдете (например, в обычном Cython), недоступны из-за нехватки кода. В качестве примера: на моей стандартной машине с Linux есть 67 записей в math.__dict__, а на моем ESP32 их всего около 45.
К сожалению, некоторые из недостающих записей — это те, которые я хотел бы использовать, например, наибольший общий знаменатель: math.gcd() или наименьшее общее кратное: math.lcm(), и ни один из них не создан.
В обычном Python я бы сделал что-то вроде этого:

Код: Выделить всё

def my_lovely_lcm(a, b):
return a * b // gcd(a, b)

and then
math.lcm = my_lovely_lcm
НО... очевидно, одна из ошибок микропитона заключается в том, что вы не можете напрямую назначать новые методы вещам, которые предварительно скомпилированы («заморожены»?) ...

Код: Выделить всё

>>> math.lcm = my_lovely_lcm
Traceback (most recent call last):
File "", line 1, in 
AttributeError: 'module' object has no attribute 'lcm'
У кого-нибудь есть мысли о том, какой следующий наименее плохой способ сделать это? Это Python, поэтому я уверен, что есть что-то простое и элегантное... но я недостаточно знаю, чтобы понять, что это такое....
Кажется логичным (во всяком случае, мне), что я хотел бы просто расширить/подклассифицировать/независимо от того, какой математический модуль, чтобы код можно было более повторно использовать, учитывая, что в БОЛЬШИНСТВЕ систем эти функции будут существовать... но рад услышать, если это тоже глупая идея...

Вернуться в «Python»