我有一个Book类,现在基本上只返回内容,但是我有一个需要读取的外部文件,然后将内容传递给该实例, 例如,我开始将图书实例声明为b1
class Book():
def __init__(self,poem="empty"):
self.poem = poem
def __str__(self):
return self.poem
def reading(instance, file_content):
list_of_content = []
with open(file_content, "r") as f:
for i in f:
list_of_content.append(i.split())
flatten = [item for sublist in list_of_content for item in sublist]
string = " ".join(flatten)
instance = Book(string)
return instance
b1 = Book() # book has a default value so it wont make any error
reading(b1, "file.txt")
print("File contains:",b1) # prints empty, because reading function has not passed any data i think
问题在于,现在它只打印总是“空”的东西,我该如何将从文件读取的数据传递给在read()处调用的实例,这是出于学习目的。
答案 0 :(得分:1)
class Book():
def __init__(self,poem="empty"):
self.poem = poem
def __str__(self):
return self.poem
def reading(self, file_content):
list_of_content = []
with open(file_content, "r") as f:
for i in f:
list_of_content.append(i.split())
flatten = [item for sublist in list_of_content for item in sublist]
string = " ".join(flatten)
self.poem=string
b1 = Book()
reading(b1, "file.txt")
print("File contains:",b1)
输出
File contains: I really love christmas Keep the change ya filthy animal Pizza is my fav food Did someone say peanut butter?
答案 1 :(得分:1)
用于创建具有某些附加功能的实例,例如常用的类方法https://www.programiz.com/python-programming/methods/built-in/classmethod
尝试这个:
class Book():
def __init__(self,poem="empty"):
self.poem = poem
@classmethod
def load_book(cls, filename):
list_of_content = []
with open(filename, "r") as input_file:
for line in input_file:
list_of_content.append(line.split())
flatten = [item for sublist in list_of_content for item in sublist]
string = " ".join(flatten)
book_inst = cls(string)
return book_inst
def __str__(self):
return self.poem
book = Book.load_book("input.txt")
print(book)
答案 2 :(得分:1)
reading
应该是该类的方法,但是您也可以在创建时初始化Book
:
class Book():
def __init__(self,filename):
list_of_content = []
with open(filename) as f:
for line in f:
list_of_content.append(line.split())
flatten = [item for sublist in list_of_content for item in sublist]
string = " ".join(flatten)
self.poem = string
def __str__(self):
return self.poem
b1 = Book('file.txt')
print("File contains:",b1)
如果您仍然想创建空白书籍并可能将不同的文件读取到同一Book
中,请使read
为一种方法:
class Book():
def __init__(self,poem='<empty>'):
self.poem = poem
def read(self,filename):
list_of_content = []
with open(filename) as f:
for line in f:
list_of_content.append(line.split())
flatten = [item for sublist in list_of_content for item in sublist]
string = " ".join(flatten)
self.poem = string
def __str__(self):
return self.poem
b1 = Book()
print("File contains:",b1)
b1.read('file.txt')
print("File now contains:",b1)