python - 如何在具有相似名称和相同类型的多个对象上调用方法?
问题描述
我该如何简化此代码,最好将其放入循环或一行中?
object1.callMethod()
object2.callMethod()
object3.callMethod()
difObject1.callDifMethod()
difObject2.callDifMethod()
difObject3.callDifMethod()
我知道我可以将对象放在一个列表中并对其进行迭代,但是,这仍然需要两个单独的循环和两个单独的列表。有什么方法可以制作 [1,2,3] 的单数列表并使用它来区分每种类型的三个不同对象,因为数字也在对象名称中?
解决方案
您可以使用字典方法:
methods = {cls1.method1: [cls1_obj1, cls1_obj2, cls1_obj3],
cls1.method2: [cls1_obj4, cls1_obj5, cls1_obj6],
cls2.method1: [cls2_obj1, cls2_obj2}
for method, objs in methods.items():
for obj in objs:
method(obj)
这假设您正在使用实例方法。对于静态/类方法,您需要调整为该方法传递的对象。
我不确定是否有任何优雅的东西不涉及预定义 and 的倍数(或组合)lists
并dicts
对其进行循环,因为您需要明确哪个对象运行哪些方法,无论哪种方式都需要定义。
理想情况下,如果您有多个相同类的相似对象,您可能会选择从一开始就在列表中实例化它们:
# Instead of this
object1 = Foo(1)
object2 = Foo(2)
object3 = Foo(3)
...
# do this
foos = [Foo(i) for i in range(3)]
# Or this
bars = {name: Bar(name) for name in list_of_names}
然后在组中操纵它们变得微不足道:
for foo in foos:
foo.foo_method()
for bar in bars.values():
bar.bar_method()
虽然仍然很容易单独引用对象:
foo[index].foo_method()
bar[key].bar_method()
推荐阅读
- python - 如何在使用 Aiohttp 库执行函数之前返回响应?
- c# - 绑定到 ObservableCollection 内对象的 ObservableCollection 属性
- javascript - 如何修复 googleappmaker 中的“未定义 DocumentApp”
- c# - 将 DataGridViewButtonCell 转换为类型 DataGridViewDisableButtonCell 时出错
- python - 嵌入在合并中的 for 循环
- mysql - MySql - 在某个单词之后选择一些字符并将其添加到另一列
- c++ - 如何找到数组左右两侧的最大元素?
- java - Spring DI 同时具有两个构造函数
- python - 使用 Python 发送 HTTP Post,尽管使用 Postman,但缺少值
- dbeaver - 如何让 DBeaver 显示保存按钮?