Skip to main content
 首页 » 编程设计

Python 查询之可迭代的方法

2025年05月04日17www_RR

我正在尝试模拟以下输出(来自 Marakana.com 的 excellent Python tutorial:

>>> for c in lot.cars_by_age(): 
...     print c 
1981 VW Vanagon 
1988 Buick Regal 
2010 Audi R8 

到目前为止我的代码:

class ParkingLot(object): 
    def __init__(self, spaces, cars=[]): 
        self.spaces = spaces 
        self.cars = cars 
    def park(self, car): 
        if self.spaces == 0: 
            print "The lot is full." 
        else: 
            self.spaces -= 1 
            self.cars.append(car) 
    def __iter__(self): 
        return (car for car in self.cars) 
 
class Car(object): 
    def __init__(self, make, model, year): 
        self.make = make 
        self.model = model 
        self.year = year 
    def __str__(self): 
        return '%s %s %s' % (car.year, car.make, car.model) 

我想向 ParkingLot() 类添加一个方法 (cars_by_age())。但是,根据示例代码,此方法在某种程度上需要是可迭代的。我不确定如何执行此操作 - 对于一个类,您定义了一个 iter 函数,但是您如何为一个方法执行此操作?

请您参考如下方法:

并不是说方法 是可迭代的;该方法返回的值 是可迭代的。 cars_by_age 实现可以简单地返回一个 Car 列表。

def cars_by_age(self): 
    return sorted(self.cars, key=lambda car: car.year) 

使用sorted创建一个新的排序列表,并使用 lambda指定您要按汽车的 year 属性排序。

http://wiki.python.org/moin/HowTo/Sorting