Python,Django,如何在类内部使用导入,无法解决这个问题

1 投票
2 回答
1789 浏览
提问于 2025-04-16 04:09

我想在一个类里面使用导入的模块,然后让另一个类继承这个类,这样我就不用在每个文件里手动定义导入的模块了。我试着这样做,但没有成功,任何建议都很欢迎:

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

我尝试过用“self”的不同方式,但不知道怎么把它和导入的模块一起用,因为这和我通常用“self”的类属性或方法不一样。

2 个回答

1

在Python中,导入(import)只是把东西加到当前的命名空间里。命名空间就像一个容器,里面存放着你可以使用的变量和函数。当你从一个函数返回时,这个容器里的内容就会消失,但你可以通过把它添加到'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)
5

这个方法对我来说很好用。

不过你这样做会更好:

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

注意,如果你按照你的方式做,你需要在每个实例中单独初始化它们,并且要像这样赋值给self:

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

无论哪种方式,现在你都可以在那个类或它的子类中的其他方法里通过 self.bar 来访问 bar

撰写回答