Python 实现一个简单的插件管理器类,该类能够注册需要不同参数的检查函数
我想实现一个插件管理器类,该类能够注册多个检查函数,在Python 实现一个简单的插件管理器类,该类能够注册需要不同参数的检查函数,python,oop,Python,Oop,我想实现一个插件管理器类,该类能够注册多个检查函数,在dict中运行对虚拟机相关数据的检查,以验证是否满足特定条件(在检查函数中定义)。检查函数本身返回True(满足检查条件)或False。将哪些检查注册到manager类是由用户选择要运行的检查来定义的 我的问题是: 检查函数需要不同的参数(除了vm_data参数),例如,它们有时需要传入API连接对象以检查条件。 如何确保函数注册了所需的参数,因为用户可以选择要运行的检查?除了维护一堆条件句(这不是最好的主意)之外,还有其他方法来完成这项任务
dict
中运行对虚拟机相关数据的检查,以验证是否满足特定条件(在检查函数中定义)。检查函数本身返回True
(满足检查条件)或False
。将哪些检查注册到manager类是由用户选择要运行的检查来定义的
我的问题是:
检查函数需要不同的参数(除了vm_data
参数),例如,它们有时需要传入API连接对象以检查条件。
如何确保函数注册了所需的参数,因为用户可以选择要运行的检查?除了维护一堆条件句(这不是最好的主意)之外,还有其他方法来完成这项任务吗?最后,我只想添加/删除检查函数,而不必处理条件块,这是不可维护的。也许还有另一种方法可以动态准备检查所需的参数
# just for simplicity - user input is a list
user_activated_checks = ['check_min_ram', 'check_vm_overrides']
manager = CheckManager()
if 'check_min_ram' in user_activated_checks:
min_ram = 1024
manager.register_check(check_min_ram, min_ram)
if 'check_vm_overrides' ...
欢迎来到SO!看看这本书。如果你能提供一份工作,那会很有帮助的。看看你是否需要更多的提示。这能回答你的问题吗?
def check_min_ram(vm_data, min_ram):
"""Check if VM has minimum of configured RAM"""
# check-specific code
def check_vm_overrides(vm_data, cluster):
"""Check for VM configured cluster overrides."""
# check-specifc code
class CheckManager:
"""Check plugin manager"""
def __init__(self):
self.registered_checks = []
def _check_names(self):
check_names = []
for check in self.registered_checks:
check_names.append(check[0].__name__)
return check_names
def register_check(self, func, *args, **kwargs):
if func.__name__ not in self._check_names():
self.registered_checks.append((func, args, kwargs))
def run_checks(self):
"""
Run all checks.
Return True if one check is True.
"""
if not self.registered_checks:
return False
for check in self.registered_checks:
for func, args, kwargs in check:
if func(*args, **kwargs):
return True