Python, Django, использующий Import изнутри класса, не может понять это - PullRequest
1 голос
/ 15 сентября 2010

Я хочу использовать импорт внутри класса, который затем наследуется другим классом, поэтому мне не нужно вручную определять мой импорт в каждом файле. Я пытаюсь это так, но это не работает, любой совет приветствуется:

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 ]

5 голосов
/ 15 сентября 2010

Это прекрасно работает для меня.

Но вам лучше сделать это:

>>> 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.

1 голос
/ 15 сентября 2010

В Python импорт просто добавляет к текущему пространству имен. Пространство имен теряется, когда вы возвращаетесь из функции, но вы можете сохранить указатель, добавив его к «себе».

Вы можете сделать:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...