【发布时间】:2020-12-05 11:56:18
【问题描述】:
我想使用元类来实现一个工厂,该工厂为来自不同来源的数据制造处理器。以下是骨架代码:
class ProcessorFactory
def __call__(self, classname, supers, classdict):
...
def __New__(self, classname, supers, classdict):
...
def __int__(self):
...
class MQ_AddOn(object):
# MQ-specific code
class File_AddOn(object):
# Filesystem-specific code
class Web_AddOn(object):
# Web-specific code
class MQ_Processor(MQ_AddOn, metaclass=ProcessorFactory()):
# code common to all channels (MQ, Filesystem, Web)
class File_Processor(File_AddOn, metaclass=ProcessorFactory()):
# code common to all channels (MQ, Filesystem, Web)
class Web_Processor(Web_AddOn, metaclass=ProcessorFactory()):
# code common to all channels (MQ, Filesystem, Web)
我的问题是,是否有一种方法,类似于汇编中的宏扩展,将所有通道(MQ、文件系统、Web)共有的代码分解出来,这样就不必为每个类复制它?
【问题讨论】:
-
什么是
SorrogateFactory?除非它是一个返回元类的可调用对象,否则您需要metaclass=SorrogateFactory。 -
我猜你的意思是
metaclass=ProcessorFactory,而且你似乎把父母弄糊涂了:class File_processor(File_AddOn...) -
是的。那是一个错字。它是处理器工厂。修好了。
-
我对您要排除哪些常见代码感到有些困惑。它只是
class语句的元类部分吗?我对元类是ProcessorFactory的实例而不是type的子类(我认为这是不合法的)感到更加困惑。这看起来可能是XY problem。