python-3.x - 如何在python中使用配置文件中的函数?
问题描述
我有一个 yaml 配置文件,如下所示:
---
tables:
- table: my_table
db: my_user
checks:
- type: my_check
column: [col1, col2, col3, col4, col5]
我正在阅读此配置文件并根据yaml 中的检查部分运行检查。
假设我有一个如下所示的类:
class MasterCheck(object):
def my_check(self, over_view_table, columns, label):
if columns is None:
null_check = set(over_view_table[(over_view_table['null_share'] > 0) | (
over_view_table['empty_string_share'] > 0)].column_)
else:
null_check = set(over_view_table[(over_view_table['null_share'] > 0) | (
over_view_table['empty_string_share'] > 0)].column_).intersection(set(columns))
if len(null_check) > 0:
self.alert = '{0}: NULLs in {1}'.format(label, null_check)
else:
self.alert = ""
我可以使用以下方法运行此检查:
my_check = checks['type'][0]['type']
getattr(MasterCheck(), my_check)(table_summary, column, table)
这个想法是根据配置文件中指定的内容自动运行检查。但是,可以从配置文件中为每个表提供多个检查,并且我事先不知道配置文件中的字符串是否是该类的属性。有什么推荐的方法可以在不知道该属性属于哪个类的情况下从配置文件中实例化我的检查。这方面的任何想法都会有所帮助。
解决方案
你的配置文件说:
- type: my_check
- 您可以选择让它明确地说“类型:MasterCheck.my_check”。
- 您可以创建一个类列表(或实例化对象),然后
getattr
对所有类运行搜索循环,直到找到my_check
. - 您可以使用混合模式来做同样的事情,其中
MasterCheck
继承自多个类,每个类都提供唯一命名的函数。
例如:
class MasterCheck(NullCheck, FkCheck, SpellCheck):
这些类中的每一个都提供一个或多个功能,例如my_check
,可以出现在您的配置文件中。(如果你不让函数名在类之间保持唯一,那么 python 的 mro,方法解析顺序,将选择一个赢家。)
推荐阅读
- java - 当字符属性更改时,Java JTextPane 不会更新其大小
- bash - 使用 sudo 和 awk 进行 Bash while 循环
- python - 是否可以在 PysimpleGui 表中插入复选框?
- microsoft-graph-api - 从 Teams 获取活跃的 PSTN 来电显示
- android - 在推送通知中显示视频、gif 或横幅
- c - POSIX 的 FTW 结构成员 - 他们告诉我们什么?
- asterisk - 当我在 Asterisk 中拨打任何分机时,首先播放一些问候消息?
- c++ - 对话关闭信号
- capacitor - 无法在 Capacitor Ionic 的应用程序视图中打开 PDF 文件
- wpf - 将带有数据库的 wpf 应用程序提供给客户端