我发现元类的存在和使用可以通过为类创建过程提供一个优雅的句柄来使您免于编写大量代码。我在我的应用程序中使用它,其中实例化了几个交互服务器。详细说明:
每个设备都实例化一个特定于其操作的服务器类,它是(...的子类)的子类,最终是这一BaseServer
类。现在,有些设备服务器需要一个ThreadedTCPserver
,有些需要一个SimpleTCPServer
(模块:)socketserver
。它们不能都派生自同一个类,因为使用ThreadingMixin
覆盖了SimpleTCPServer
.
为了处理这个动态类配置,我创建了一个MetaServerType
,它选择 BaseServer 的基类 as(SimpleTCPServer,)
或 as (ThreadedTCPServer,)
--> 生成我想要的动态配置的服务器类的结果!(呜呼)
现在,我的问题来了:我想使用一个存储参数的配置文件,这些参数默认由 MetaServerType 使用。例如:config.default_loglevel 或 config.default_handler 等。并且可以根据元类规范覆盖单个服务器(从命令行或其他方式)。
只有一个配置对象的实例通过程序流是一种好的设计实践吗?实现这一点的一种方法是在元类的类主体中初始化配置对象——但我的程序流程从其他地方开始,这意味着元类被多次调用,从而产生了各种配置实例。似乎在导入时调用了元类(?)
因此,非常欢迎您提供详细的答案:
- 如何为元类提供配置信息?
- 让单个配置实例通过程序流进行编辑、更新甚至最终编写的好方法是什么?
- 元类的输入参数能否以某种方式扩展超出
Metaclass.__new__(meta, name, bases, attrs)
?- 额外的问题:这是否让我们更接近(服务器的)有限状态机,以便状态(而不是实例)可以“暂停”或“恢复”?