首页 > 解决方案 > 如何从 Python 中的不同类调用相同的方法?

问题描述

我对不同的类有相同的方法,我使用 ifs 调用它们。我想使用更快的方法来做到这一点。例如:

Class Car:
  def get_name():
    return 'car'

Class House:
  def get_name():
    return 'house'

Class Airplane:
  def get_name():
    return 'airplane'

# main file
import Car
import House
import Airplane
import sys

c = Car
h = House
a = Airplane

option = sys.argv[0]
if option == 0:
  print c.get_name()
elif option == 1:
  print h.get_name()
elif option == 2:
  print a.get_name()

有没有办法从特定类调用方法,避免使用 ifs?

这只是我想要实现的一个简单示例。我有一堆已经标准化的类,具有相同的方法。我想这是多态性,但我不确定如何让它在这种特定情况下工作,以获得更好的性能。这就是我想要达到的目标:更好的表现。谢谢你。

编辑 1

决定所选类的不是 sys.argv,而是一些计算的结果。例如,音量最高的项目。这只是简化我的算法的一个例子。

编辑 2 我正在组合多个 API,每个 API 都有自己的 Class 文件,这些文件具有相同的方法,我设法返回相同的值(当然,使用网络数据)。我首先从所有类中调用该方法,例如 get_price() 并比较它们。对于价格最低的那个,我想调用 get_name(),而不使用 ifs...

标签: pythonpython-3.xpython-2.7

解决方案


忽略您问题中的一些问题(例如这些方法都不是staticmethod或者classmethod它们可能想要的),然后如果您希望调用get_name最低的类型get_price,那么类似:

min( (x.get_price(), x) for x in (Car, House, Airplane) )[1].get_name()

应该做你想做的。

在这里,我们:

  • 找到最小对(<type>.get_price(), <type>),利用元组的比较比较元素;然后
  • 我们从该对中获取相应的类型并调用get_name

注意:在这个例子中,如果两个get_price都返回完全相同的最小值,那么选择的那个将是相当随机的,这取决于类型的比较。


推荐阅读