У меня есть небольшая библиотека полезных функций для взаимодействия с API моей компании, и я натолкнулся (как мне кажется, на этот вопрос) на интересный вопрос, на который я не могу найти ответ.
Мне часто приходится запрашивать большие объемы данных у API, поэтому я делаю что-то вроде:
class Client(object):
def __init__(self):
self.data = []
def get_data(self, offset = 0):
done = False
while not done:
data = get_more_starting_at(offset)
self.data.extend(data)
offset += 1
if not data:
done = True
Это отлично работает и позволяет мне перезапустить поиск с того места, где я остановился, если что-то пойдет не так. Однако, поскольку функции python являются обычными объектами, мы можем делать такие вещи, как:
def yo():
yo.hi = "yo!"
return None
и тогда мы можем опросить вас о его свойствах позже, например:
yo.hi => "yo!"
мой вопрос: могу ли я переписать свой пример на основе классов, чтобы закрепить данные в самой функции, не обращаясь к функции по имени. Я знаю, что могу сделать это:
def get_data(offset=0):
done = False
get_data.data = []
while not done:
data = get_more_starting_from(offset)
get_data.data.extend(data)
offset += 1
if not data:
done = True
return get_data.data
но я бы хотел сделать что-то вроде:
def get_data(offset=0):
done = False
self.data = [] # <===== this is the bit I can't figure out
while not done:
data = get_more_starting_from(offset)
self.data.extend(data) # <====== also this!
offset += 1
if not data:
done = True
return self.data # <======== want to refer to the "current" object
Можно ли ссылаться на «текущий» объект чем-либо, кроме его имени?
Что-то вроде «это», «я» или «мемеме!» это то, что я ищу.