【发布时间】:2015-08-31 00:48:50
【问题描述】:
我正在使用 Python 3,并且正在尝试重写我不久前编写的图形库。现在,我有一个名为Scene 的类,除了它的构造函数之外,它还有三个方法:logic(self)、update(self) 和render(self)。
logic(self) 处理每个Scene 的逻辑。它处理所有鼠标和键盘输入,并判断按钮是否被点击等等。
update(self) 可以被认为是一种抽象方法。它的内容就是raise NotImplementedError。 update(self) 每秒被调用一定次数,并更新程序中正在发生的任何事情,但不会在屏幕上绘制任何内容。这是与帧率无关的更新。如果要使用这个库制作 Pong,球的位置将在此方法中更新。
render(self) 实际上会更新屏幕。这样,程序的速度就不是由帧率决定的了。
我喜欢我当前的Scene 实现。现在真的很干净,而且看起来很直观。但是,我无法克服如何扩展Scene。假设我想为像主菜单这样的基本 GUI 创建一个 Scene。我希望只有一个主菜单Scene,因为我认为每次查看和使用主菜单时都重新创建另一个Scene不是一个好主意。
我开始使用静态类扩展Scene,但很快意识到这实际上是不可能的。 当前的范例是否只是扩展 Scene 使用普通类,然后每次必须使用子类时重新创建和销毁它?例如,我应该重新创建并在查看和离开时分别销毁假设的MainMenu(Scene) 对象?
【问题讨论】:
-
什么叫“静态类”?你能发布一些代码示例吗?
-
“静态类”是指只包含静态方法的类,并且永远不会被构造。我的意思是,我不打算让用户执行
myObject = StaticClass(5, 1, 3)之类的东西,而是调用它的方法。例如,StaticClass.doSomething()。 -
您使用了错误的工具来完成这项工作。如果你的类只有静态方法,那么它就不是一个类。除非您做了非常具体的事情(例如 Django Meta 类)并且您确切地知道原因,否则它应该是一个模块。
-
虽然考虑到您似乎想要做的事情,但我会说它们可能应该是具有普通方法的类。能够根据某些状态创建场景并拆除它们对我来说非常有意义。
-
你可以让他们单身。您仍然必须实例化它们,但您会阻止创建超过 1 个实例。不过,这仍然感觉像是一些不必要的限制。
标签: python class python-3.x inheritance static