【发布时间】:2022-01-30 21:10:36
【问题描述】:
假设有一堆类,根据传入的参数需要检测类并调用其句柄方法。
可能的类
class A:
def handle(self):
print('handle method of A class is invoking')
class B:
def handle(self):
print('handle method of B class is invoking')
class C:
def handle(self):
print('handle method of C class is invoking')
class D:
def handle(self):
print('handle method of D class is invoking')
class E:
def handle(self):
print('handle method of E class is invoking')
那么您是否建议像以下那样映射类?
class_mapping = {
'a': A,
'b': B,
'c': C,
'd': D,
'e': E,
}
class Handler:
def __init__(self, param):
klass = class_mapping[param]
instance = klass()
instance.handle()
或者映射类路径并动态导入?为什么?
class_path_mapping = {
'a': "folder_name.A",
'b': "folder_name.B",
'c': "folder_name.C",
'd': "folder_name.D",
'e': "folder_name.E",
}
class DynamicImportHandler:
def __init__(self, param):
klass = importlib.import_module(class_path_mapping[param])
instance = klass()
instance.handle()
【问题讨论】:
-
从您问题中的示例来看,
Handler和DynamicImportHandler似乎不需要是类 - 除了初始化另一个类之外,它们什么都不做。您可以编写一个函数来创建并返回其中一个类的实例(按照您的第一种方法,因为它更简单)。
标签: python architecture software-design