Программно сгенерировать методы для класса

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

11
задан Matt Joiner 29 November 2011 в 09:48
поделиться