2012-09-30 39 views
3

可能重复:
getattr on a module的Python模块类的全局实例

我有一个定义它Manager类的模块。我希望模块创建这个类的一个实例,并让该模块作为这个类的“全局实例”。例如:

class Manager: 

    def func(self): 
     print('stuff') 

instance = Manager() 

def func(): 
    instance.func() 

有没有办法让module.x返回module.instance.x? (有点像模块级属性)

更新:在this question的答案只覆盖了我的一半用例(即它不是重复的,这个问题的要求是不同的);我也需要该模块的属性也可用。例如:

class Manager: 

    def __init__(self): 
     self.x = 3 

    def func(self): 
     print('stuff') 

sys.modules[__name__] = Manager() 

>>> module.func 
<func> 
>>> module.x 
3 
>>> module.Manager 
AttributeError 
+0

如果你不需要像'__getattr__'这样的花哨类功能,那么为什么不简单地使用模块级函数而不是方法? – yak

+0

我需要“奇特的类功能”,例如继承/继承和创建更多实例。我知道它好像我想要一个单身人士,但我不知道。我想要一个普通类,它的模块有一个“全局实例”。 – darkfeline

+0

在这种情况下,请考虑编写将委托给主实例的函数。您也可以简单地为每种方法执行'foo = instance.foo'。 – yak

回答

0

为什么没有Manager__getattr__返回模块级对象?

def __getattr__(self, key): 
    try: 
     return globals()[key] 
    except KeyError: 
     raise AttributeError(key) 
+0

如果我继承了'Manager'或者创建了另一个实例,'__getattr__'就没有意义了。 – darkfeline