1

我有一个类和 portal_type Person,其中有 2 个方法:

class Person(BaseContent):
    def print_all(self):
        catalog = getToolByName(self, "portal_catalog")
        results = catalog(portal_type = 'Person')
        final_result = ''
        for result in results:
            final_result += result.getObject().print_person()
        return final_result

    def print_person(self):
        return self.name

但我意识到它print_all与任何对象都没有关联,所以它应该是静态方法。我想要做的是获取该人的所有实例并调用 print_person()。但问题是:在我将 print_all 方法设为静态方法后,由于没有 self 对象,我应该在目录中写什么。例如现在我不能写

catalog = getToolByName(self, "portal_catalog")

我想要类似的东西:

@staticmethod
def print_all():
    instance = Person()
    catalog = getToolByName(instance, "portal_catalog")
    .
    .
    .

但它给了我'invalid syntax'错误instance = Person()!我希望我的问题很清楚,任何帮助将不胜感激!

4

1 回答 1

2

您可以替换selfcontext,如下所示:

# this is needed only if you don't have a context to pass
from zope.app.component import hooks

def print_all(context=None):
    if context is None:
        context = hooks.getSite()
    catalog = getToolByName(context, "portal_catalog")
    results = catalog(portal_type = 'Person')
    final_result = ''
    for result in results:
        final_result += result.getObject().print_person()
    return final_result
于 2012-08-02T11:03:49.583 回答