2013-07-08 57 views
2

我有一個Position類,它有兩個屬性,LatLonPython - 按給定順序對某些類屬性進行迭代

我想通過實施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

您需要定義一個__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替代它們。

+0

完美。正如我懷疑的那樣,這很簡單,但是我被'__iter__'返回'self',從而需要實現'__next__'方法(在這種情況下不需要)。另外,你提到的這個PEP可以解決我長期以來的疑問。從現在開始小寫屬性,謝謝兩次! – heltonbiker

+0

(應該指出,我們不能使用'long'這個名字,因爲它會影響內置的'long') – smci