2

我有一个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]
4

1 回答 1

4

您需要定义一个__iter__方法

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。PEP8 风格指南建议为类保留大写的名称。遵循常规将有助于其他人更容易地理解您的代码,因此我抵制使用您的属性名称的冲动,而是将它们替换为latand lng

于 2013-07-08T18:49:51.133 回答