1

クラスとportal_typePersonがあり、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しかし、それはどのオブジェクトにも関連付けられていないため、静的メソッドである必要があることに気付きました。私がやりたいのは、personのすべてのインスタンスを取得し、print_person()を呼び出すことです。しかし、問題は次のとおりです。print_allメソッドを静的メソッドにした後、自己オブジェクトがないため、カタログに何を書き込む必要がありますか。例えば今は書けない

catalog = getToolByName(self, "portal_catalog")

私は次のようなものが欲しいです:

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

しかし、それは私に'invalid syntax'エラーを与えていますinstance = Person()!私の質問が明確であり、どんな助けもありがたいです!

4

1 に答える 1

2

次のようselfに、に置き換えることができます。context

# 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 に答える