【发布时间】:2018-04-09 10:18:50
【问题描述】:
我正在使用 pygame 为游戏制作一个小型框架,我希望在该框架上实现基本代码以快速启动新项目。这将是一个模块,任何使用的人都应该创建一个文件夹,其中包含子文件夹用于精灵类、地图、关卡等。 我的问题是,我的框架模块应该如何加载这些客户端模块?我正在考虑设计它,以便开发人员可以将目录名称传递给主对象,例如:
game = Game()
game.scenarios = 'scenarios'
然后游戏会将“场景”附加到 sys.path 并使用__import__()。 我已经测试过了,它可以工作。
但后来我研究了一下,看看python中是否已经有一些自动加载器,所以我可以避免重写它,我发现了这个问题Python modules autoloader?
基本上,不建议在 python 中使用自动加载器,因为“显式优于隐式”和“可读性很重要”。
这样,我认为,我应该强制我的模块的用户手动导入他/她的每个模块,并将它们传递给游戏实例,例如:
import framework.Game
import scenarios
#many other imports
game = Game()
game.scenarios = scenarios
#so many other game.whatever = whatever
但这对我来说看起来不太好,不太舒服。看,我习惯使用 php,我喜欢它使用自动加载器的方式。 所以,第一个例子有一定的崩溃或麻烦的可能性,或者它只是不是'pythonic'?
注意:这不是网络应用程序
【问题讨论】:
-
不要发起一场激烈的战争,但 php 确实鼓励坏习惯。选择第二个。
-
作为链接问题中已接受答案的作者,我只能支持 klutt 的评论和 Nils Werner 的(优秀)答案:Python 是一种完全不同的语言,具有完全不同的执行模型和完全不同的哲学所以忘记 PHP 并学会用 Python 的方式写东西。
-
谢谢。你说得对,我喜欢 Nils 的说法。
标签: python frameworks pygame desktop autoloader