У меня есть около 20 методов для перенаправления на метод оболочки, который принимает исходный метод, и остальные аргументы:
class my_socket(parent):
def _in(self, method, *args, **kwargs):
# do funky stuff
def recv(self, *args, **kwargs):
return self._in(super().recv, *args, **kwargs)
def recv_into(self, *args, **kwargs):
return self._in(super().recv_into, *args, **kwargs)
# and so on...
Как я могу добавить больше этих методов программно? Это примерно так, как я добираюсь до того, как все начинает выглядеть неправильно:
for method in 'recv', 'recvfrom', 'recvfrom_into', 'recv_into', ...:
setattr(my_socket, method, ???)
Могу ли я сделать это, назначив определение класса или что-то еще более естественное?
class my_socket(parent):
def makes_recv_methods(name):
# wraps call to name
def recv_meh = makes_recv_methods('recv_meh')
Я предпочел бы использовать __get__
и друзей, когда это возможно, над магическими функциями от types
.