从 boost-python 包装工厂创建派生的 class

Create a derived class from a boost-python wrapped factory

在 C++ 库中,我有一个 class 带有私有构造函数和一个工厂:

class MyServer {
    MyServer() {..};
  public:
    MyServer create(std::string &config);
};

使用 boost-python 我创建了一个允许我使用这个工厂的包装器:

from MyWrappedLibrary import MyServer, StartServer
server = MyServer.create('some: magic, config: string')
StartServer(server)

现在我想像这样向 MyServer 添加一个方法:

from MyWrappedLibrary import MyServer, StartServer

class MyEnhancedServer(MyServer):
    def __init__(self, config):
        super().__init__(config)

    def another_method(self):
        do(something)

但这当然行不通,因为我无法直接实例化 MyServer

当然,我可以创建一个 class,它不是从 MyServer 派生的,但感觉不太好,因为我必须包装每个方法:

class MyEnhancedServer:
    def __init__(self, config):
        self.core_instance = MyServer.create(config)

    def foo_1(self):  # wrapper
        self.core_instance.foo_1()

    def foo_2(self):  # wrapper
        return self.core_instance.foo_2()

    def another_method(self):
        do(something)

server = MyEnhancedServer('some: magic, config: string')
StartServer(server.core_instance)

问题:有没有办法让MyEnhancedServer的MyServer.create()的结果变成'base instance'?

结果会是这样的:

class MyEnhancedServer(MyServer):
    def __init__(self, config):
        self.MyServer = MyServer.create()

    def another_method(self):
        do(something)

一位同事告诉我该怎么做,但 post 没有回答。诀窍是实现 __new__() 并使用这个很酷的魔法设置实例' class:

class MyEnhancedServer(MyServer):
    def __new__(cls, config):
        self = cls.create(config)
        self.__class__ = cls.__class__(cls.__name__, (cls, ), {})
        return self