2013-05-21 3 views
0

У меня есть сайт продукта с кодом, как это:инстанцировать «вид» обращал внимания с self.context параметрами и self.request в другой точке зрения ГРОК

class AClass(grok.View): 
    """ Code of AClass """ 
    pass 

class BClass(AClass): 
    """ Code of BClass with 'update' method defined """ 
    pass 

class CClass(BClass): 
    def update(self): 
     self.panel = BClass(self.context, self.request) 
     # more code  

мои сомнения, почему BClass является Instantiate/называется в CClass код с двумя параметрами (self.context и self.request). BClass имеет метод обновления без других параметров (только self) и не имеет метода __init__ явно. Итак, какова функция self.context и self.request в этом случае? Это какое-то наследство или приобретение?

После этого я увидел это, я думаю, так что я не полностью понял вездесущие понятия контекста и контейнера в Plone.

ответ

3

Это не имеет смысла для обоих подклассов из BClass и имеет экземпляр BClass. Я не понимаю, чего должна достичь линия self.panel = BClass(self.context, self.request).

Контекст и контейнер ни в коем случае не являются вездесущими. Контекст - это объект, который вы просматриваете. Он устанавливается в классах __init__. Контейнер является атрибутом контекста, обычно __parent__.

+0

Спасибо, @Lennart Regebro! Я никогда не создавал groqu View с параметрами раньше. Я взглянул на документацию grok (http://grok.zope.org/doc/1.5/reference/components.html#grok.View) и увидел, что 'grok.View' действительно принимает' self.context' и ' self.request' как «конструктор». Обычно я всегда создаю 'grok.View' без параметров и никогда не работал с этим случаем создания экземпляра представления внутри другого. Это хороший образец? Большое спасибо и извините за мой неясный вопрос. –

+2

@LeonardoAndrade: Очень редко вам нужно создавать экземпляры. Я предполагаю, что всякий раз, когда вы создаете представление, вы делаете что-то неправильно. Представления создаются экземплярами объектов. –

Смежные вопросы