python - 如何从 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...
解决方案
忽略您问题中的一些问题(例如这些方法都不是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
都返回完全相同的最小值,那么选择的那个将是相当随机的,这取决于类型的比较。
推荐阅读
- javascript - 使用 async/await 等待数据到达数组
- android - Mapbox 地图不起作用。只有一个蓝色圆圈
- string - 拆分字符串中的每个字符。VBA.net
- python - 试图得到平方和
- nginx - 如何在 Kubernetes (ACE) 中启用 nginx 入口控制器的遥测以获取应用程序洞察力?
- python - 通过在追加新行的同时替换旧数据来将新数据合并到旧数据中
- api - 转换从 api 检索的字符串日期时出现错误的日期
- git - 我可以将许多文件中的一个文件恢复到提交前的状态吗?
- gcc - 如何在cygwin中将-pg传递给gcc
- haskell - 它需要多少个 fmap?