另一个初学者的问题,希望大家能帮助我。
我正在尝试比较不同汽车的统计数据。为此,我将它们全部分为不同的类,现在想参加这些类并将它们的数量进行比较。我想我对如何进行实际比较有一个大致的了解,但是我想知道如何测试变量(甚至只是打印出对象名称)以查看哪个变量属于哪个类?
示例Prius在高速公路上行驶51英里,因此如果我想寻找顶级mpg车辆,它将是毫无疑问的赢家。我想找出一种方法,让我知道在找到该编号时实际上是在谈论普锐斯。也许像“ Prius:51 mpg”之类的东西。
希望这是有道理的。如果没有,我将尽我所能澄清! 我知道这可能是一个简单的答案,但是由于某些原因,我无法弄清楚……
谢谢大家的帮助!
class Impala:
mpg_h = 27
mpg_c = 17
fuel_size = 17
class Prius:
mpg_h = 51
mpg_c = 48
fuel_size = 11.9
class CivicHybrid:
mpg_h = 40
mpg_c = 45
fuel_size = 12.3
def top_mpg(*arg):
high = (max(arg))
top_mpg(Impala.mpg_h, Prius.mpg_h, CivicHybrid.mpg_h)
也是一个奖励问题...例如,如何获得我的代码以将所有不同的类自动输入到燃料大小的函数中?我计划一次最多比较50辆汽车,但是将它们全部写入似乎很痛苦,而且可能会有更简单的方法来实现这一目标...
答案 0 :(得分:1)
首先-对于您标题中的问题,我不确定我是否100%理解您的要求。您可以使用isinstance
测试某些内容是否属于某个类,例如isinstance(3, int)
是True
。或者,如果您定义自定义类A
并且a
是A
的实例,则isinstance(a, A)
是True
。如果要测试对象是否具有特定属性,则可以使用hasattr
内置函数对其进行测试。例如,python中的字符串具有方法strip
,则hasattr('abc', 'strip')
为True
。
看来您的汽车有相同的配方-为什么不像这样将它们分组在一起
class Car:
def __init__(self, make, mpg_h, mpg_c, fuel_size):
self.make = make
self.mpg_h = mpg_h
self.mpg_c = mpg_c
self.fuel_size = fuel_size
def __str__(self):
return '<Car of make {}>'.format(self.make)
然后创建如下模型:
prius = Car('Prius', 51, 48, 11.9)
civic_hybrid = Car('CivicHybrid', 40, 100, 12.3)
...
然后,您可以将它们与不同的指标进行比较(可以传入获取用于与key
可选参数进行比较的键的函数),然后可以查看它们的构成
max_mpg_h = max([prius, civic_hybrid], key=lambda x: x.mpg_h)
print(max_mpg_h) # prints <Car of make Prius>
max_mpg_c = max([prius, civic_hybrid], key=lambda x: x.mpg_c)
print(max_mpg_c) # prints <Car of make CivicHybrid>