所以,我有一些在python中创建类的任务:
这是我的任务:
1)必须在完整路径中初始化类。
,例如
obj = File('/tmp/file.txt')
2)该类必须支持write方法。
3)File类型的对象必须支持添加。
4)File类型的对象必须支持迭代协议,并遍历文件的行。
for line in File('/tmp/file.txt'):
在这里我遇到了一个问题,因此我有一个无限循环。
5)使用打印功能输出文件时,应打印完整路径,并在初始化时传递。
这是我的代码:
import os
class File:
def __init__(self, file_path, content = None):
self.file_path = file_path
self.content = content
try:
with open(file_path) as file_to:
self.content = file_to.read()
except FileNotFoundError:
print("File or directory does not exist!\nEnter existing directory")
def write(self, line):
self.line = line
with open(self.file_path, 'a+') as file_to:
file_to.write(self.line)
def __add__(self, obj):
with open('result.txt', 'a+') as new_file:
new_file.write(self.content + obj.content)
def __iter__(self):
return self
def __next__(self):
self.stop = 0
with open(self.file_path) as f:
data = f.readlines()
if self.stop > len(data):
raise StopIteration
self.stop += 1
return data
def __str__(self):
return f"{self.file_path}"
答案 0 :(得分:0)
这里我有一个问题,因此我有一个无限循环。
每次File
实例上的 调用下一个方法时,您都会重新打开文件并读取它。连续next
次调用不会因__next__
不断返回相同的数据而结束。
您可以直接从__iter__
:
class File:
def __init__(self, file_path):
self.file_path = file_path
try:
with open(file_path) as file_to:
self.content = file_to.readlines()
except FileNotFoundError:
print("File or directory does not exist!\nEnter existing directory")
raise
def __iter__(self):
return iter(self.content)
要使类实例成为迭代器,即实现迭代器协议,您可以在__iter__
中返回self,并在__next__
中返回文件的行:
class File:
def __init__(self, file_path):
...
self._index = 0
def __iter__(self):
return self
def __next__(self):
try:
return self.content[self._index]
except IndexError:
raise StopIteration
self._index += 1