【发布时间】:2021-10-18 01:38:00
【问题描述】:
作为一名教师,我想为数学问题编写一个工作表生成器。
Python 应该生成数学问题及其解决方案(例如,创建一个多项式函数并计算它们的零点)。然后它会写入一个 LaTeX 输入文件并通过pdflatex 创建一个 pdf。它适用于几个问题,但现在我想对其进行概括并使其面向对象以加快进一步工作表的创建。
所以我创建了一个类Problem,其中包含几个参数和方法。但是每个Problem-instance 都应该有不同的函数来为数学问题及其解决方案创建文本(因为每个对象都是不同的数学问题)。而且我不知道我应该如何以优雅/适当的方式管理它。
目前我正在做这样的事情:
import random
class Problem_generator(object):
def __init__(self):
self.problemlist = []
def create_worksheet(self):
""" Creates the latex-document by writing the output in a LaTeX input file. For
this minimal example, I'll just print the outputs instead.
"""
for problem in self.problemlist:
text = problem.create()
print("Problem: " + text[0])
print("Solution: " + text[1])
class Problem(object):
def __init__(self, problem_generator, function):
# do some stuff like to create Tkinter-GUI-objects for every problem
self.function = function
problem_generator.problemlist.append(self)
def create(self):
return self.function()
def add_numbers():
""" Create the problem to add two numbers. """
a, b = random.randint(0, 100), random.randint(0, 100)
problem_text = str(a) + " + " + str(b)
solution_text = str(a+b)
return problem_text, solution_text
generator = Problem_generator()
problem_1 = Problem(generator, add_numbers)
generator.create_worksheet() # in the complete program I start this over a GUI
它工作正常,但感觉不“正确”。
我还考虑过使用create() 方法实现Problem 类,该方法只会引发未实现的错误,然后为我创建的每个问题更新create() 方法。但据我所知,这将为类的每个对象更新 create() 方法。
因此,我很乐意获得一些提示/建议,我可以如何以“优雅”的方式处理所描述的问题。
【问题讨论】:
-
一般来说,处理这种情况的经典 OOP 方法是定义一个带有整体接口的抽象基类,也许还有一些通用的辅助方法,然后定义特定问题的“具体”子类来实现解决特定问题的方法。基本上就像@tchar 在their answer 中说明的那样。
-
好的,所以你会建议这样做吗?还是有另一种/更好的方法?总的来说,这个程序不必是完美的,我只是一个自学/业余爱好者。但我只是想了解更多关于编程的知识并学习一种好的/干净的风格。