【发布时间】:2018-05-20 13:37:42
【问题描述】:
在 C++ 库中,我有一个带有私有构造函数和工厂的类:
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。
当然,我可以创建一个不派生自 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)
问题:有没有办法让MyServer.create() 的结果成为 MyEnhancedServer 的“基础实例”?
结果会是这样的:
class MyEnhancedServer(MyServer):
def __init__(self, config):
self.MyServer = MyServer.create()
def another_method(self):
do(something)
【问题讨论】:
标签: python c++ factory boost-python derived-class