我有一个网站产品,代码如下:
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
),没有显式的__init__
方法。那么,在这种情况下,self.context
和self.request
的作用是什么?这是一种继承还是获得?
在我看到这个之后,我想我并没有完全理解Plone中无处不在的上下文和容器的概念。
既要从BClass派生子类,又要将BClass作为实例,这是没有意义的。我不明白self.panel = BClass(self.context, self.request)
这行应该实现什么。
context和container绝不是无所不在的。上下文是你正在观看的对象。它是在类的__init__
方法中设置的。容器是上下文的一个属性,通常是__parent__
。