Python中Method下的条件

时间:2018-11-26 21:14:28

标签: python python-3.x

我不断收到NameError,说明CarInventory没有定义,也没有定义。另外,我仍然不确定我的compare()方法的代码是否正确。

这是我的作业代码:

class CarInventory():
   def __init__(self, n_cars = 0, cars = []):
      self.n_cars = n_cars
      self.cars = cars
   def add_car(manufacturer,model,year,mpg):
      self.cars = {'manufacturer': self.manufacturer, 'model': self.model, 'year': self.year, 'mpg': self.mpg}
      self.n_cars = self.n_cars + 1
   def compare(self, attribute, direction=highest):
      self.lowest = self.cars[0]
      self.direction = self.cars[0]
        for car in self.cars:
           if self.car[attribute] < self.lowest:
              self.lowest = car
           elif self.car[attribute] > self.highest:
              self.highest = car
      if direction == highest:
        output = highest 
      elif direction == lowest:
        output = lowest
      return output

2 个答案:

答案 0 :(得分:1)

highest给您NameError的原因是您已经写过:

def compare(self, attribute, direction=highest):

告诉Python,如果调用方在调用compare方法时不包括第二个参数(方向),则该方法应使用变量中名为{{ 1}}。但是您的程序中没有声明这样的变量。

您可能想写:

highest

告诉Python如果调用者没有为 def compare(self, attribute, direction='highest'): 提供任何值,请使用highest文字字符串值

关于direction错误,您没有向我们展示正在产生该错误的程序部分。它位于您尝试使用 CarInventory类的位置,而不是您定义的位置。

答案 1 :(得分:0)

我看到您的代码有很多问题。

首先,我注意到很多对self.X的引用,其中X不是CarInventory的成员。这是对self的滥用,它被用来将变量限定为解释器应查看的类(或偶尔使用的函数)。如果您引用的是self.manufacturer,而CarInventory则不是拥有一个名为manufacturer的成员,那么您将获得一个例外。

我还注意到,在您的add_car函数中,您将整个汽车列表设置为要添加的新汽车。给定此方法的定义,我认为这不是您想要的。相反,您应该使用append方法将新车添加到您的车列表中。

compare也存在许多问题。例如,您尝试使用一个名为highest的变量,而不是'highest'的参数的字符串direction,这是您的NameError的来源。您还遇到了许多比较问题,并且缺少else

我已修复您的代码

class CarInventory():

    def __init__(self, n_cars = 0, cars = []):
        self.n_cars = n_cars
        self.cars = cars

    def add_car(manufacturer,model,year,mpg):
        self.cars.append({
            'manufacturer': manufacturer, 
            'model': model, 
            'year': year, 
            'mpg': mpg})
        self.n_cars = self.n_cars + 1

    def compare(self, attribute, direction = 'highest'):
        lowest = self.cars[0]
        highest = self.cars[0]
        for car in self.cars:
            if car[attribute] < lowest[attribute]:
                lowest = car
            elif car[attribute] > highest[attribute]:
                highest = car
       if direction == 'highest':
           return highest 
      else:
          return lowest

顺便说一句,您应该在类定义和函数之间添加换行符,以提高可读性。