在python中装入类之后,有没有方法调用函数?

2024-05-03 03:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在类加载后将类注册到管理器,就像http处理程序注册到处理程序管理器一样。在

它可以通过其他方式来完成,例如在映射中定义关系或在类定义之后调用寄存器函数。在

但是有没有更好的方法可以自动完成这个任务呢?在


更新:

沙丘的回答满足了我的需要。我想解决的问题对其他人更有用。在

下面是一些例子。在

处理程序

经办人/basehandler.py-类库,管理员

经办人/汉德拉.py-A级(classBase)

经办人/汉诺德b.py-B类(库)

handlerA和handlerB包含classA和classB,它们是classBase的子类。在

来自/a/的a类处理程序请求,b类处理程序/b/

我需要在第一次导入HandlerManager模块时自动注册它们。在


Tags: 方法函数pyhttp处理程序管理器定义关系
3条回答

我不知道你所说的“加载”类通常是初始化或调用的。在

在这种情况下,使用__init__方法或__call__方法。在

两者都可以定义,并且可以包括在管理器中注册的调用。在

类,特别是__init__方法的描述更好here。在


小例子:

^{1}$

(只需将print替换为您的注册码。)

似乎是元类的一个可能用途。很少需要为任何事情使用元类——它们在几乎所有事情上都做得太过火了。而且,使用元类可以实现的大多数事情都可以通过decorator更容易地实现。但是,通过这种方式,您可以确保基处理程序的任何子类也将自动注册(除非它要求不注册)。在

^{1}$

如果您需要使用抽象类,那么您将需要使您的元类子类ABCMeta。这是因为抽象类是通过使用元类来实现的,而python只允许一个类有一个元类。通过子类化ABCMeta,可以使两个子类兼容(其中一个类中没有与另一个冲突的代码)。在

^{pr2}$

如果这里的“being loaded”意味着“被导入”(在第一次),那么类decorator就是一个解决方案。下面的示例代码是从this page复制的

^{1}$

相关问题 更多 >