【发布时间】:2017-10-15 19:38:38
【问题描述】:
我希望这个问题是有道理的,我整整两天都在努力解决这个问题。
我正在尝试创建一个非常小的脚本,然后我可以将其转换为 Flask Web 应用程序,用于比较 SPECint 处理器分数。
一点背景:
从 specint.org,我可以下载 csv 文件,其中包含有关它们已进行基准测试的处理器和服务器的基准测试信息。我的应用程序的想法是执行以下操作:
向用户询问他们需要的基准(cint 或 rint)、服务器 型号,以及他们感兴趣的处理器。必须这样做 两次,用于服务器 1 和服务器 2,以便我可以比较它们。
我需要检查他们输入的信息是否正确, 即,如果有人输入处理器名称 XYZ,它应该引发 错误并提示输入有效查询。为此,我正在计划 将整个数据库的一个版本转储到我自己的数据库中,所以我 可以在实际下载 csv 文件之前执行检查 服务器。
如果输入的信息有效,我将直接从 SPECint 的服务器动态生成正确的 url,用于下载和读取包含基准分数信息的 csv 文件。
一旦我下载并处理了两台服务器的信息,我将应用一些简单的数学运算并返回类似以下内容的结果:“服务器 1 比服务器 2 快/慢 10%”,或类似那个。
正如您可能想象的那样,这将需要大量重复的代码,因此它似乎是类的完美用例。我一直在进行一些测试,结果很有希望。
但是,我的问题是我无法弄清楚如何捕获用户输入、测试输入、下载相应的 csv 文件以及以每个实例的方式传递所有用户输入,而无需在某处重复代码。我一直在搜索和搜索,似乎@classmethod 是我需要的,但我不确定,因为它的使用对我来说似乎仍然很深奥(我是新手)(参考:Example of Class with User Input)
例如,这有点工作:
我的班级:
class Baseline:
def __init__(self, benchmark, model, processor):
self.benchmark = benchmark
self.model = model
self.processor = processor
捕获和打印实例结果。
old_server = inputs.Baseline(test=input("Select benchmark: "),
model=input("Enter model: "),
processor=input("Enter processor: ")
)
new_server = inputs.Baseline(test=input("Select benchmark: "),
model=input("Enter model: "),
processor=input("Enter processor: ")
)
print(old_server.benchmark)
print(old_server.model)
print(new_server.benchmark)
print(new_server.model)
如您所见,我已经在重复代码,相反,我想在类中做所有事情,所以我可以简单地调用它的实例来捕获、测试、下载和返回结果.正如我之前所说,@classmethod 似乎是答案,但我很感激任何指导,希望有一些示例代码,这样我就可以完全掌握这些概念。
【问题讨论】:
标签: python python-3.x