我正在寻找装饰一个“可调用的”类(定义了__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
将具有带有端口号的class属性,以便稍后可以关闭服务。
答案 0 :(得分:2)
您正在尝试修补__init__
方法;事实上,__call__
方法在这里没有任何可能性。
您通常使用常规(函数)装饰器来装饰 __init__
方法;如果你有使用类装饰器,那么使用一个子类装饰类:
def init_service(cls):
class InitService(cls):
def __init__(self, port='ignored'):
super(InitService).__init__(5432)
return InitService