不确定这在Python中是否可行,但我希望有一个类的实例作为模块级全局变量,当调用该全局变量时,它将返回一个默认属性。在
这个想法来自于this question,它重写了__call__,让一个类模仿一个函数。在
这个想法的快速(未经测试)示例:class _foo(object):
__slots__ = ("_foo",)
_init = False
def __init__(self):
if not _init:
self._foo = ["bar", "baz", "zog"]
def __call__(self, item=None):
if itme is not None:
return self._foo[item]
else:
return self._foo
def __getitem__(self, item):
return self._foo[item]
# Module level
FOO = _foo()
假设上述代码位于模块中(食品). 通过使用解释器,我可以让可调用窗体按我想要的方式工作,而不是不可调用窗体。在
^{pr2}$
我的想法是,我需要以某种方式定义一个默认属性,以便在直接调用实例时,获得我选择的内部list/dict。我可以通过重写repr来作弊,但这有点破坏了Python自己的API,我想避免这种情况。在方括号(>>> foo.FOO[])中没有传递值,反而会产生语法错误。在
我希望任何潜在的解决方案都能至少与python2.4兼容,最多与2.7兼容。如果这是不可能的,那么我想我还是坚持使用可调用格式。在