0

我正在寻找装饰一个“可调用”类(一个__call__定义了方法的类),以便我可以在调用之前启动后台服务__init__并在调用它本身之前操纵传递的参数以包含服务的详细信息开始了。

因此,例如:

@init_service # starts service on port 5432
class Foo(object):
  def __init__(self, port=9876):
    # init here. 'port' should now be `5432` instead of the original `9876`

  def __call__(self):
    # calls the background service here, using port `5432`

func = Foo(port=9876)
...
result = func()

该类init_service将具有带有端口号的类属性,以便稍后可以关闭服务。

4

1 回答 1

2

您正在尝试修补该__init__方法;__call__有一种方法的事实在这里没有任何意义。

您通常会使用常规(函数)装饰器来装饰__init__方法;如果您必须使用类装饰器,则使用一个子类装饰类:

def init_service(cls):
    class InitService(cls):
        def __init__(self, port='ignored'):
            super(InitService).__init__(5432)

    return InitService
于 2013-07-30T08:44:38.187 回答