0

这是一个关于面向对象编程的一般问题,我将使用下面的简化示例来说明它。

FTP 站点内每天都会上传一个文件。文件根据上传日期命名。所以,我们有 Day1.txt、Day2.txt 等等。我创建了一个一次下载一个文件的类。所以当我调用这个类的一个实例时,会根据给定的参数下载一个文件。例如: downloading_class("2")将下载Day2.txt.

现在,我想通过下载从开始日期到结束日期的一系列文件来扩展我的程序的功能。显然我会使用一个for循环。for我的问题是:将循环集成到类中然后调用类的实例是一个好习惯,如下所示:

downloading_class("2","10")

或者

在类外编写一个 for 循环并将实例集成到循环中:

for i in range(start,end):
    downloading_class(i)

为什么一个或另一个更好?

4

2 回答 2

1

如果你想定义一些对一系列文件执行的操作,那么有一个代表一系列文件的类可能是有意义的。这并不意味着您应该将其集成到代表一个文件的类中,但是,您可以编写两个类!

但是,请仔细考虑对一系列文件的这些操作是否真的只适用于日期顺序的连续范围,而不是适用于任何顺序的任何旧文件集合。如果它们可以应用于任何旧的文件集合,那么您最好坚持使用您的类来表示单个文件。然后编写一些对文件列表(或其他可迭代对象)进行操作的其他函数,用于任何旧集合操作,并为方便起见编写一个函数来返回最常见的情况(按日期顺序排列的范围)。那么您的代码可能如下所示:

for file in download_range("2", "10"):
    do_something_with_one(file)

或者对于您正在执行预定义的任何旧集合操作的情况:

do_something_with_many(download_range("2", "10"))

在这两种情况下,您都可以替换download_range("2", "10")(downloading_class("2"), downloading_class("4"), downloading_class("6"))、 或reversed(download_range("2", 10"))、 或(file for file in download_range("2", "10") if file.size() < 1000)。或者你喜欢的任何东西,这是设计可以灵活使用的 API 的目标。

于 2013-10-06T11:58:56.377 回答
1

我认为在这种情况下,实例化对象不会对性能产生太大影响,但总的来说,我认为最好实例化一次并使用 N 次,而不是实例化并使用 N 次。

于 2013-10-06T11:34:18.433 回答