Próbuję napisać prosty interfejs użytkownika dla Plurk przy użyciu pyplurk.Nie mogę powtórzyć klasy listy w Pythonie
Udało mi się utworzyć połączenie API, zalogować się, pobrać i wyświetlić listę znajomych. Teraz próbuję pobrać i wyświetlić listę Plurków.
pyplurk zapewnia funkcję GetNewPlurks następująco:
def GetNewPlurks(self, since):
'''Get new plurks since the specified time.
Args:
since: [datetime.datetime] the timestamp criterion.
Returns:
A PlurkPostList object or None.
'''
offset = jsonizer.conv_datetime(since)
status_code, result = self._CallAPI('/Polling/getPlurks', offset=offset)
return None if status_code != 200 else \
PlurkPostList(result['plurks'], result['plurk_users'].values())
Jak widać ta zwraca PlurkPostList, który z kolei jest zdefiniowana w następujący sposób:
class PlurkPostList:
'''A list of plurks and the set of users that posted them.'''
def __init__(self, plurk_json_list, user_json_list=[]):
self._plurks = [PlurkPost(p) for p in plurk_json_list]
self._users = [PlurkUser(u) for u in user_json_list]
def __iter__(self):
return self._plurks
def GetUsers(self):
return self._users
def __eq__(self, other):
if other.__class__ != PlurkPostList: return False
if self._plurks != other._plurks: return False
if self._users != other._users: return False
return True
Teraz oczekiwać, aby móc zrób coś takiego:
api = plurk_api_urllib2.PlurkAPI(open('api.key').read().strip(), debug_level=1)
plurkproxy = PlurkProxy(api, json.loads)
user = plurkproxy.Login('my_user', 'my_pass')
ps = plurkproxy.GetNewPlurks(datetime.datetime(2009, 12, 12, 0, 0, 0))
print ps
for p in ps:
print str(p)
Kiedy to uruchomię, otrzymam:
<plurk.PlurkPostList instance at 0x01E8D738>
z "druku PS", a następnie:
for p in ps:
TypeError: __iter__ returned non-iterator of type 'list'
nie rozumiem - na pewno listy jest iterable? Gdzie się mylę - w jaki sposób mogę uzyskać dostęp do Plurków w PlurkPostList?
Niezwiązany z problemem, który masz, zawsze dziedziczę "obiekt", a nie nic (tj. 'Klasa PlurkPostList (object):'), więc używam * klas nowego stylu *. –
... a jeśli uczynisz 'PlurkPostList' dziedziczącym ze standardowej' listy', masz znacznie mniej pracy do wykonania. – bobince
@bobince, Niezupełnie. Lista dziedziczenia nie zapewnia niczego wartego. –