Plone 实例化一个;格罗克视图“;在另一个grok视图中使用参数self.context和self.request

Plone 实例化一个;格罗克视图“;在另一个grok视图中使用参数self.context和self.request,plone,grok,Plone,Grok,我有一个网站产品,代码如下: 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,

我有一个网站产品,代码如下:

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
CClass
代码中实例化/调用了两个参数(
self.context
self.request
)。
BClass
有一个不带其他参数的更新方法(只是
self
),并且没有显式的
\uuuuuuu init\uuuu
方法。 那么,在这种情况下,
self.context
self.request
的功能是什么?这是一种继承还是获得


在看到这一点之后,我认为我没有完全理解Plone中无处不在的上下文和容器概念。

从BClass中创建子类并将BClass作为实例是没有意义的。我不明白这行
self.panel=BClass(self.context,self.request)
应该实现什么


上下文和容器决不是无所不在的。上下文是您正在查看的对象。它是在class
\uuuu init\uuuu
方法中设置的。容器是上下文的一个属性,通常是
\uuuu parent\uuuu

它对来自BClass的子类和将BClass作为实例都没有意义。我不明白这行
self.panel=BClass(self.context,self.request)
应该实现什么


上下文和容器决不是无所不在的。上下文是您正在查看的对象。它是在class
\uuuu init\uuuu
方法中设置的。容器是上下文的一个属性,通常是
\uuuu parent\uuuu

谢谢,@Lennart Regebro!我以前从未用参数实例化过grok视图。我查看了grok文档(),发现
grok.View
确实接受
self.context
self.request
作为“构造函数”参数。通常情况下,我总是在没有参数的情况下实例化
grok.View
,并且从不在另一个视图中实例化视图。这是一个好的模式吗?非常感谢,很抱歉我的问题不清楚。@LeonardoAndrade:很少需要实例化视图。我的猜测是,无论何时实例化一个视图,都是做错了什么。视图由发布者在对象上实例化。谢谢@Lennart Regebro!我以前从未用参数实例化过grok视图。我查看了grok文档(),发现
grok.View
确实接受
self.context
self.request
作为“构造函数”参数。通常情况下,我总是在没有参数的情况下实例化
grok.View
,并且从不在另一个视图中实例化视图。这是一个好的模式吗?非常感谢,很抱歉我的问题不清楚。@LeonardoAndrade:很少需要实例化视图。我的猜测是,无论何时实例化一个视图,都是做错了什么。视图由发布者在对象上实例化。