是否可以向模块添加属性和特殊方法?我想定义一个模块,以便导入它的行为类似于一个类实例,并且该实体充当类定义。基本上,这是为了避免丑陋的语法:模块可以有属性吗?
import game
if game.Game().paused:
print("The game is paused")
E.g.游戏模块是这样的:
_Speed = 1
@property
def paused():
return _Speed == 0
,并用它的文件:
import game
if game.paused:
print("The game is paused")
而且,是可以定义特殊的方法(如__call__
)?
要清楚,我没有区分类/实例方法,因为我将game.Game
用作单例/ borg类。
我已经使用@property进行了测试并定义了__bool__
,但都没有按照我所希望的那样行事。
编辑(为什么我想用一个属性信息):
我有一个属性game.speed
,功能game.paused()
和功能game.pause(bool)
。基本上,我有一个临时变量,用于在游戏暂停时存储游戏速度。当游戏暂停时,私人速度变量被设置为零。我不希望用户看到速度为零,并且能够在游戏暂停时修改速度,以便在游戏恢复时使用新速度。
为什么不直接使用'from game import Game'? – 2012-03-30 05:09:37
属性如何工作?元类?元类如何引用Game类? – Darthfett 2012-03-30 05:11:52
我在说,如果你使用'from ... import'语法,你*不需要模块上的*属性。使用你的模块的人不会期望它有属性,所以如果你从模块中删除属性,并且只需在你自己的代码中使用'form ... import',你将获得相同的可读性,但是你的API会更好符合其他程序员的期望,这是一件好事。 – 2012-03-30 05:14:22