У меня есть схема, как:Итератор Python как член класса?
class Base(object):
param, d=0, 1
def get_all(self):
while True:
a = self.get_xxx(param)
if not a:
break
handle(a)
param += d
class A(Base):
def get_xxx(param):
return some_method(param)
class B(Base):
def get_xxx(param):
return other_method(param)
Тогда, я был информирован о том, что для B, после каждого get_xxx парам должно быть а + 1 вместо Param + D. Это означает, что мне нужно извлечь логику изменения параметров в конце get_all. Я придумал схему с использованием итератора:
class Base(object):
def get_all(self):
get_xxx = self.get_xxx()
while True:
a = get_xxx.next()
if not a:
break
handle(a)
class A(Base):
def get_xxx():
param, d = 0, 1
while True:
yield somemethod(param)
param += d
class B(Base):
def get_xxx():
param = 0
while True:
a = somemethod(param)
param = a + 1
yield a
Проблема решена, но почему-то мне неловко. Поэтому мне интересно, есть ли лучшее решение? Большое спасибо!
Какая версия Python это? –
Перед тем, как убить StackOverflow, я предлагаю вам ответить на вопрос CodeReview: StackOverflow для технической проблемы (например, «моя собака съела мою программу!»), В то время как CodeReview предназначен для улучшения существующего решения. ссылка: http://codereview.stackexchange.com/ – lucasg
@SimeonVisser 2.7.6 –