我正在编写C库的Python绑定,它允许用户在C中创建自定义“类”并通过另一个对象实例化它们,如:
my_class = create_class(init_callback, finalize_callback, ...);
instance1 = manager_create_object(some_manager, my_class, ...);
instance2 = manager_create_object(some_manager, my_class, ...);
不幸的是,C语言不是面向对象的,所以这个库在语言提供的范围内使用了这个概念。
在Python中,为了让用户定义自己的类,我想使用Python类的概念:
class MyClass(package.BaseClass):
def __init__(self, ...):
...
def _finalize(self, ...):
...
instance1 = some_manager.create_object(MyClass, ...)
instance2 = some_manager.create_object(MyClass, ...)
我无法直接使用MyClass()
实例化对象,因为它需要所述管理员(请参阅上面的manager_create_object()
)。
要求用户扩展包的类(在此示例中为package.BaseClass
)而不能直接使用MyClass
实例化派生类(MyClass()
),这是不是很奇怪/ unPythonic?这主要是针对插件接口,我们需要用户在Python模块文件中定义一个或多个类。
答案 0 :(得分:0)
坚持用户(客户端)提供某些功能的本地实现并不罕见,特别是如果您可以提供所需支持的示例和/或模板。许多供应商都这样做,因为它们无法涵盖所有实施。
但是,让确定你提供了各种各样的例子。您想让您的用户轻松上手。更好的是,提供构成几个流行环境的工作实现的文件。