2010-09-14 41 views
1

我想在类中使用导入,然后由另一个类继承,这样我就不必手动定义导入在每个文件中。我想它是这样,但它不工作,任何意见表示赞赏:Python,Django,使用从类内部导入,似乎无法解决这个问题

class Djangoimports(): 
    def __init__(self): 
     from django.template import Context 
     print Context 


class Init1 (Djangoimports): 
    def __init__(self): 
     Djangoimports.__init__(self) 

     self.c = Context(self.constructor_dict) # just example of trying to use the imported "Context" 
>>>>> global name 'Context' is not defined 

我试图试图用“自我”的变化,但无法弄清楚如何适当地与进口用这个作为从它不一样的类属性/方法,我通常使用'自我'

回答

5

这对我来说很好。

但是你最好这样做:

>>> class Test(object): 
...  from functools import partial 
... 
>>> Test().partial 
<type 'functools.partial'> 

注意,这样做你的方式,你必须初始化它们在每个实例的基础,并分配给自己,像这样:

def Test(object): 
    def __init__(self): 
     from functools import partial 
     self.partial = partial 

无论哪种方式,您现在都可以在该类的其他方法中使用bar,或者在self.bar的衍生方法中使用bar

+0

谢谢,我觉得我得到你的意思,我不知道我怎么会继承进口商类,但是 – Rick 2010-09-14 22:35:08

+0

@Rick类中使用它。您可以将其作为self.bar来访问,因为它成为类名称空间的一部分。 – aaronasterling 2010-09-14 22:38:45

+0

好吧,我明白了,应该已经抓住了我自己:)...感谢您的帮助 – Rick 2010-09-14 22:40:40

1

在Python中,导入仅添加到当前名称空间。一旦你从函数返回,命名空间就会丢失,但你可以保留指针将它附加到'self'。

你可以这样做:

class Djangoimports(): 
    def __init__(self): 
     from django.template import Context 
     self.Context = Context 

class Init1 (Djangoimports): 
    def __init__(self): 
     Djangoimports.__init__(self) 
     self.c = self.Context(self.constructor_dict) 
相关问题