【发布时间】:2021-07-21 12:37:56
【问题描述】:
我是 OOP 和 Python 的新手,遇到以下问题: 假设我有一个逐行包含数据的文件,我想用它来创建类实例。处理文件、初始化实例和存储它们的最 Pythonic 方式是什么? 我有 3 种替代方法: CASE-1:逐行处理整个文件的类方法,创建实例并将它们存储在列表中 CASE-2:类外的功能与 CASE-1 相同 CASE-3:类外的函数单独处理每一行,并在 main 中处理一个 for 循环 例如:
class TestClass:
all_instances_1 = []
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
#CASE-1
@classmethod
def from_file(cls, input_file):
my_file = open(input_file, "r")
for line in my_file:
var1, var2 = line.split(',')
new_instance = TestClass(var1, var2])
cls.all_instances_1.append(new_instance)
my_file.close()
#CASE-2
def outside_class_init(input_file):
all_instances_2 = []
my_file = open(input_file, "r")
for line in my_file:
var1, var2 = line.split(',')
new_instance = TestClass(var1, var2])
all_instances_2.append(new_instance)
my_file.close()
return all_instances_2
#CASE-3
def one_by_one(my_str):
var1, var2 = line.split(',')
new_instance = TestClass(var1, var2])
return new_instance
def main():
filename = "$FILE"
TestClass.from_file(filename)
instances_list2 = outside_class_init(thefile)
all_instances_3 = []
my_file = open(thefile, "r")
for line in my_file:
all_instances_3.append(one_by_one(line))
my_file.close()
if __name__ == '__main__':
main()
如果它们都不是真正的好方法,您将如何处理? 提前谢谢你
【问题讨论】:
-
感谢您的回答!你能详细说明一下吗?我也没有在描述中提到它,但这将是一个具有 3 个类的较小程序(对于第一个实例,我在 csv 中有数据,另一个在 json 中,第三个将使用创建我提到的前两个类的信息学)。
标签: python file class processing