У меня есть около 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__
и друзья, когда это возможно, по магическим функциям из типов
.