Python - 在给定顺序上对某些类属性实现迭代

时间:2013-07-08 18:46:58

标签: python iterator generator next yield

我有一个Position课程,它有两个属性LatLon

我希望通过实施iterator协议来实现以下API(但是一些谷歌搜索让我更加困惑):

pos = Position(30, 50)
print pos.Latitude
> 30

print pos.Longitude
> 50

for coord in pos:
    print coord
> 30
> 50

print list(pos)
> [30, 50]

1 个答案:

答案 0 :(得分:4)

您需要定义__iter__ method

class Position(object):
    def __init__(self, lat, lng):
        self.lat = lat
        self.lng = lng

    def __iter__(self):
        yield self.lat
        yield self.lng

pos = Position(30, 50)
print(pos.lat)
# 30
print(pos.lng)
# 50
for coord in pos:
    print(coord)
# 30
# 50
print(list(pos))    
# [30, 50]

PS。 The PEP8 style guide建议为类保留大写的名称。遵循传统方法可以帮助其他人更轻松地理解您的代码,因此我拒绝了使用您的属性名称的冲动,而是将其替换为latlng