Используя хвост и буфер для получения последних K строк в файле
Мне дали этот буфер и сказали сделать обратный ввод, чтобы получить последние K строк в файле. Из того, что я пытался сделать, каждый раз, когда я пытался запустить код, он говорит, что used не является атрибутом Input. Может кто-нибудь сказать мне, почему это происходит? Заранее спасибо.
class Input:
def __init___( self, file ):
self.file = file # must open( <filename>, "rb" )
self.length = 0
self.used = 0
self.buffer = ""
def read( self ):
if self.used < self.length: # if something in buffer
c = self.buffer[self.used]
self.used += 1
return c
else:
self.buffer = self.file.read( 20 ) # or 2048
self.length = len( self.buffer )
if self.length == 0:
return -1
else:
c = self.buffer[0]
self.used = 1
`
2 ответа
Я собираюсь выйти на конечности здесь и попытаться угадать, что проблема в том, что вы используете неправильное имя для __init__
магический метод (как заметил Hai Vu). Обратите внимание, что в вашем коде три заключительных подчеркивания вместо двух.
Так как __init__
Метод вызывается при создании объекта для установки его различных атрибутов, used
атрибут никогда не устанавливается, потому что __init__
функция никогда не запускается.
После этого, used
является первым атрибутом, доступным в Input.read, что заставляет Python жаловаться на его отсутствие.
Если я прав, удалите подчеркивание, и это решит проблему (хотя могут быть и другие).
Попробуйте сделать отступ...
class Input:
def __init___( self, file ):
self.file = file # must open( <filename>, "rb" )
self.length = 0
self.used = 0
self.buffer = ""
def read( self ):
if self.used < self.length: # if something in buffer
c = self.buffer[self.used]
self.used += 1
return c
else:
self.buffer = self.file.read( 20 ) # or 2048
self.length = len( self.buffer )
if self.length == 0:
return -1
else:
c = self.buffer[0]
self.used = 1