使用方法从另一个属性创建属性

Create attribute from another attribute with a method

我有一个包含 .txt 文件的文件夹,我想创建一个对象列表,其中每个对象都有 3 个属性(文件、名称、文本)。 'name' 只是没有“.txt”扩展名的文件名。 'text is the content of the file'

我卡住了,这就是我到目前为止所做的。

class My_class():
   def __init__(self, file):
       self.file = file
       self.name = file.split('.')[0]

   def get_text(self):
       folder_file = folder + '\' + self.file
       with open(folder_file, 'r') as f:
           text = f.read()
       return text

folder = r'<the folder path that contains the .txt files>'

list_of_files = [file for file in os.listdir(folder) if file.find('.txt') != -1]

objects = [My_class(f) for f in list_of_files]
[print(obj.file) for obj in objects]
[print(obj.name) for obj in objects]

我想创建一个名为 get_text 的方法,并在代码中执行它,因此它会为每个名为文本的对象创建一个新属性。

调用该方法后,我希望能够执行以下命令并打印出文件的内容。

[print(obj.text) for obj in objects]

您可以让 get_text 方法设置对象的属性:

def get_text(self):
    folder_file = f"{folder}\{self.file}"
    with open(folder_file, 'r') as f:
        self.text = f.read()

在这种情况下,不需要 return 值。如果您选择这样做,那么在 __init__ 方法中定义 text 属性并将其设置为等于 None 通常是一种很好的做法。这使您在稍后返回时更容易看到对象使用的属性(并且您已经忘记了您做了什么),并且还使执行检索检查变得简单,就像您只想要的情况一样收集您已为其检索文本的对象:

[obj.text for obj in objects if obj.text is not None]

或者,您可以在 __init__ 方法中定义 self.text,方法是将其设置为等于方法调用 self.get_text()。这意味着在初始化对象时会自动检索文本。在这种情况下,您应该保持 get_text 定义的原样——即让它创建一个局部变量 text 然后 return 该变量。这就是它的样子:

class My_class():
   def __init__(self, file):
       self.file = file
       self.name = file.split('.')[0]
       self.text = self.get_text()