Cas*_*all 6 python module properties
是否可以向模块添加属性和特殊方法?我想定义一个模块,以便导入它就像一个类实例,并且正文充当类定义.从本质上讲,这是为了避免像这样丑陋的语法:
import game
if game.Game().paused:
print("The game is paused")
Run Code Online (Sandbox Code Playgroud)
例如,游戏模块看起来像这样:
_Speed = 1
@property
def paused():
return _Speed == 0
Run Code Online (Sandbox Code Playgroud)
并使用它的文件:
import game
if game.paused:
print("The game is paused")
Run Code Online (Sandbox Code Playgroud)
另外,是否可以定义特殊方法(例如__call__)?
要清楚,我不区分类/实例方法,因为我使用的game.Game是singleton/borg类.
我已经使用@property和定义进行了测试__bool__,但都没有像我希望的那样行事.
编辑(有关我为什么要使用属性的信息):
我有一个属性game.speed,一个函数game.paused()和一个函数game.pause(bool).从本质上讲,我有一个临时变量,用于在游戏暂停时存储游戏速度.有一个私人速度变量在游戏暂停时设置为零.我从不希望用户将速度视为零,并且能够在游戏暂停时修改速度,以便在游戏恢复时使用新的速度.
kin*_*all 12
Python并不关心sys.modules实际上是什么模块.所以你可以:
# game.py
class Game(object):
pass
import sys
sys.modules["game"] = Game()
Run Code Online (Sandbox Code Playgroud)
现在其他模块import game将获取Game实例,而不是原始模块.
我不确定我推荐它,但它会做你想要的.