我有一个Position
课程,它有两个属性Lat
和Lon
。
我希望通过实施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]
答案 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建议为类保留大写的名称。遵循传统方法可以帮助其他人更轻松地理解您的代码,因此我拒绝了使用您的属性名称的冲动,而是将其替换为lat
和lng
。