我想在类加载后将类注册到管理器,就像http处理程序注册到处理程序管理器一样。在
它可以通过其他方式来完成,例如在映射中定义关系或在类定义之后调用寄存器函数。在
但是有没有更好的方法可以自动完成这个任务呢?在
更新:
沙丘的回答满足了我的需要。我想解决的问题对其他人更有用。在
下面是一些例子。在
处理程序
经办人/basehandler.py-类库,管理员
经办人/汉德拉.py-A级(classBase)
经办人/汉诺德b.py-B类(库)
handlerA和handlerB包含classA和classB,它们是classBase的子类。在
来自/a/的a类处理程序请求,b类处理程序/b/
我需要在第一次导入HandlerManager模块时自动注册它们。在
我不知道你所说的“加载”类通常是初始化或调用的。在
在这种情况下,使用
__init__
方法或__call__
方法。在两者都可以定义,并且可以包括在管理器中注册的调用。在
类,特别是
__init__
方法的描述更好here。在小例子:
^{1}$(只需将
print
替换为您的注册码。)似乎是元类的一个可能用途。很少需要为任何事情使用元类——它们在几乎所有事情上都做得太过火了。而且,使用元类可以实现的大多数事情都可以通过decorator更容易地实现。但是,通过这种方式,您可以确保基处理程序的任何子类也将自动注册(除非它要求不注册)。在
^{1}$如果您需要使用抽象类,那么您将需要使您的元类子类
^{pr2}$ABCMeta
。这是因为抽象类是通过使用元类来实现的,而python只允许一个类有一个元类。通过子类化ABCMeta,可以使两个子类兼容(其中一个类中没有与另一个冲突的代码)。在如果这里的“being loaded”意味着“被导入”(在第一次),那么类decorator就是一个解决方案。下面的示例代码是从this page复制的
^{1}$相关问题 更多 >
编程相关推荐