如何测试变量是否属于特定类?

时间:2019-02-11 05:41:20

标签: python

另一个初学者的问题,希望大家能帮助我。

我正在尝试比较不同汽车的统计数据。为此,我将它们全部分为不同的类,现在想参加这些类并将它们的数量进行比较。我想我对如何进行实际比较有一个大致的了解,但是我想知道如何测试变量(甚至只是打印出对象名称)以查看哪个变量属于哪个类?

示例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辆汽车,但是将它们全部写入似乎很痛苦,而且可能会有更简单的方法来实现这一目标...

1 个答案:

答案 0 :(得分:1)

首先-对于您标题中的问题,我不确定我是否100%理解您的要求。您可以使用isinstance测试某些内容是否属于某个类,例如isinstance(3, int)True。或者,如果您定义自定义类A并且aA的实例,则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>