我想建立一个可以这样使用的类:
d = Data(file_name)
line = next(d)
# or
for line in d:
print(line)
我有这样一个类:
@dataclass
class Data:
file_name: str
data: IO = field(default=None)
def __post_init__(self):
self._data = open(self.file_name)
def __enter__(self):
return self
def read_lines(self):
for line in self._data:
yield line
def __next__(self):
for line in self._data:
yield line
def __exit__(self, exc_type, exc_val, exc_tb):
if self.data:
self.data.close()
如果我使用这段代码,那么它工作正常:
with self._data as data:
for line in data.read_lines():
print(line)
但是当尝试使用next
时,我打印生成器对象而不是文件行。
with self._data as data:
while line := next(data):
print(line)
如何成功使用next
方法?
文件本身是一个迭代器。你的__next__
函数唯一要做的就是调用next
。
def __next__(self):
return next(self._data)