Estoy tratando de escribir una interfaz gráfica de usuario simple para Plurk usando pyplurk.No se puede iterar sobre una clase de lista en Python
He logrado que cree la conexión API, inicie sesión y recupere y muestre una lista de amigos. Ahora estoy tratando de recuperar y mostrar una lista de Plurks.
pyplurk proporciona una función GetNewPlurks de la siguiente manera:
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())
Como se puede ver este devuelve un PlurkPostList, que a su vez se define como sigue:
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
Ahora espera que sea capaz de haz algo como esto:
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)
Cuando ejecuto esto, lo que realmente obtengo es:
<plurk.PlurkPostList instance at 0x01E8D738>
de la "ps de impresión", entonces:
for p in ps:
TypeError: __iter__ returned non-iterator of type 'list'
No entiendo - sin duda es una lista iterables? ¿Dónde me estoy equivocando? ¿Cómo accedo a Plurks en PlurkPostList?
No relacionado con el problema que está teniendo, siempre heredo 'objeto' en lugar de nada (es decir,' clase PlurkPostList (objeto): ') por lo que estoy usando * nuevas clases de estilo *. –
... y si haces que 'PlurkPostList' herede de la' lista' estándar tienes mucho menos trabajo por hacer. – bobince
@bobince, No realmente. Heredar la lista no te da nada que valga la pena. –