python - 在 Python 中使用字典执行对象
问题描述
我有点卡在字典中使用自定义类对象。
这些是我的课程,它们工作得很好。
from sqllibrary import cursor
from cloudlib import upload
class Mycustomconf(object):
def __init__(self):
self.cursor = cursor(foo, bar)
class Mycustomclass1(Mycustomconf):
def __init__(self):
super().__init__()
def something_useful(self, something):
self.upload(self.cursor(f'''SELECT foo FROM bar WHERE id = {something};'''))
def something_useful_too(self, something):
self.upload(self.cursor(f'''SELECT foo FROM bar WHERE id = {something};'''))
class Mycustomclass2(Mycustomconf):
def __init__(self):
super().__init__()
def something_useful(self, something):
self.upload(self.cursor(f'''SELECT foo FROM bar WHERE id = {something};'''))
def something_useful_too(self, something):
self.upload(self.cursor(f'''SELECT foo FROM bar WHERE id = {something};'''))
mcc1 = Mycustomclass1()
mcc2 = Mycustomclass1()
我想根据条件执行每个类(Mycustomclass1,Mycustomclass2)的方法之一。我可以使用以下脚本来实现。
from foobar import mcc1, mcc2
def handler(foo, bar):
try:
mcc1.something_useful('42', '23')
except error1 as er:
mcc1.something_useful_too('42', '22', '11')
try:
mcc2.something_useful('42', 42, '23', 12)
except error1 as er:
mcc2.something_useful_too(42, '23', 12)
...
handler(foo, bar)
该模式在我要执行的所有类方法中完全相同(尝试“something_useful”,除了错误执行“something_useful_too”)。
问题是,我已经尝试了一段时间,但我无法获得与以前的代码相同的功能,但一次又一次地避免了冗余的 try-except 块。
这是我在发布之前尝试的最后一件事:
from foobar import mcc1, mcc2
dict = {"task_a": (mcc1.something_useful('42'),
mcc1.something_useful_too('42')),
"task_b": (mcc2.something_useful('42'),
mcc2.something_useful_too('42'))}
def handler(foo, bar):
for key in dict.keys():
try:
dict[key][0]
except error1 as er:
dict[key][1]
handler(foo, bar)
感谢您在评论中更正此错误
我认为可能有一种更清洁的方法来执行此操作,而我现在还没有看到。任何人都可以发布比我更清洁的方法吗?
先感谢您!
解决方案
目前,这些方法将在声明字典时进行评估。您可以将选项存储为函数引用和参数值的元组:
from foobar import mcc1, mcc2
dict = {"task_a": ((mcc1.something_useful, '42')),
(mcc1.something_useful_too, '42')),
"task_b": ((mcc2.something_useful, '42'),
(mcc2.something_useful_too, '42'))}
def handler(foo, bar):
for key in dict.keys():
try:
dict[key][0](dict[key][1])
except error1 as er:
dict[key][1](dict[key[1])
handler(foo, bar)
推荐阅读
- windows - Windows API 禁用过滤键对话框?
- c++ - 如何在 constexpr 函数中使用非静态类成员?
- javascript - 我可以在 React 中调用使用 javascript 创建的变量吗?
- java - WebMvcConfigurer addCorsMappings 不起作用
- webpack - 编译时 Electron-forge Webpack “Uncaught ReferenceError: require is not defined”
- javascript - 单选按钮需要点击两次才能启动功能
- android - Navigation Drawer Header 背景图片占用大量内存
- c# - EF Core 看到一对多和多对多 null
- java - 实现 Oracle 和 MongoDB 之间的“全有或全无”事务
- sql - 使用两个自连接查找经理下属的下属