代码之家  ›  专栏  ›  技术社区  ›  Sachihiro

如何将内容传递到Python中类的实例中

  •  2
  • Sachihiro  · 技术社区  · 7 年前

    我有一本类书,现在基本上只返回内容,但是我有一个需要读取的外部文件,然后将内容传递到该实例中, 例如,我开始将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
    

    问题是,现在它总是只打印“空的”,我如何将从文件中读取的数据传递给在reading()中调用的实例,这是为了学习。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Mark Tolonen    7 年前

    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)
    

    如果您仍然想创建空的书籍,并可能将不同的文件读取到同一本书中 制作 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)
    
        2
  •  1
  •   Vasyl Kushnir    7 年前

    用于创建具有一些附加功能的实例,例如常用的类方法 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)
    
        3
  •  1
  •   Bitto    7 年前
    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?