Так что я получил этот код:класс Python непреднамеренное одноточечно
# The Headers class is like a dictionary but is able to store multiple name-value pairs with the same name
class Headers:
def __init__(self, index = []):
self.index = index
def __contains__(self, name):
for own_name, value in self.index:
if name.lower() == own_name.lower():
return True
return False
def __getitem__(self, name):
for i in range(len(self.index)):
if name.lower() == self.index[i][0].lower():
return self.index[i][1]
def __iter__(self):
return HeadersIterator(self)
def __setitem__(self, name, value):
for i in range(len(self.index)):
if name.lower() == self.index[i][0].lower():
self.index[i][1] = value
def add(self, name, value):
self.index.append((name, value))
class HeadersIterator:
def __init__(self, headers, index = 0):
self.headers = headers
self.index = index
def __next__(self):
if self.index >= len(self.headers.index):
raise StopIteration()
result = self.headers.index[ self.index ]
self.index += 1
return result
Я просто иметь эту проблему с ним, что, когда я пытаюсь использовать его, он, кажется, действует, как будто это где одноэлементно. Вот какой-то другой код, который показывает, что я использую его:
def headers(self):
hs = Headers()
print("huh?", Headers, hs.index,)
# Most headers start with HTTP_
for name, value in self.environ.items():
if name.startswith('HTTP_'):
parts = [ (x[0].upper() + x[1:].lower()) for x in name[ len('HTTP_') : ].split('_') ]
hs.add('-'.join(parts), value)
# Some don't
if 'CONTENT_LENGTH' in self.environ:
hs.add('Content-Length', str(self.environ['CONTENT_LENGTH']))
return hs
Теперь, кажется, что второй раз он печатает «да?» line, кажется, что переменная hs указывает на тот же объект Headers, что означает, что он будет продолжать добавлять к той же переменной Headers, которую он возвращает, имея еще больше записей в следующий раз. Любая помощь очень ценится!
Нет, список всегда один и тот же. –
Возможно, это связано с этим: 'index = []):'. Я знаю, что использование дефолтного списка может вызвать проблемы, поскольку они изменяемы. – Carcigenicate
@JacquesdeHooge: Я не уверен, что это решит что-либо, потому что в этом случае ** ссылка на [[] [:] 'будет скопирована ** ... –