プリコンパイルされたプロパティが最初のアクセス時に計算されキャッシュされるプロパティの場合、私は同じことをしたいのですが、複数のリストを1つのマスターリストにコンパイルしてください。リストの結合を格納/返すキャッシュされたプロパティを作成する
私は現在、GAE/python/webapp2/jinja2というサイトを構築しています。ぎりぎりとしたルートを念頭において、私のルートリストはかなり大きくなっています。現在、スタティックルート、ダイナミックルート、リダイレクトをすべて1つのリストにマッシュアップしています。
例:
master = [
Route('/',StaticHandler, defaults={'_uri':'index.html'}),
Route('/about-us', StaticHandler, defaults={'_uri':'index.html'})
Route('/secure/', AuthHandler, defaults={'_uri':'secure.html'}),
Route('/secure/<_uri>', AuthHandler, defaults={'_uri':'not-found.html'})
Route('/about.html', RedirectHandler, defaults={'_uri':'about-us'})]
物事をシンプルに保つために、私のようなグループにそれらをしたいと思います。現在、私が使用している
main = [
Route('/',StaticHandler, defaults={'_uri':'index.html'}),
Route('/about-us', StaticHandler, defaults={'_uri':'index.html'})]
auth = [
Route('/secure/', AuthHandler, defaults={'_uri':'secure.html'}),
Route('/secure/<_uri>', AuthHandler, defaults={'_uri':'not-found.html'})]
redirect = [
Route('/about.html', RedirectHandler, defaults={'_uri':'about-us'})]
:
master = main + auth + redirects
を
これは動作しますが、キャッシュ可能にするためにこれをクラスプロパティにラップする必要があると私は考えています。
はこれまでのところ、私が試してみました:
class master(object):
def __init__(self):
self.list = list(set(main) & set(auth) & set(redirects))
def __iter__(self):
return iter(self.list)
しかし、私はエラーを取得し、 "TypeError例外: 'タイプ' オブジェクトは、反復可能ではありません"。クラスプロパティ
- 方法:
は、だから私は2つのことを必要とします
私が対処したくないのは、すべての呼び出しでリストのコンパイルを行うことによって発生する追加のオーバーヘッドです。
キャッシングされたプロパティデコレータについて読んだことがありますが、どのように動作しているか、リストでの作業に簡単に適応できるかどうかはわかりません。
注:意図していますが、ここの例は物事を簡単にするためのものです。ここでの長期目標は、アプリの設定に応じて2つの異なるルートセットを提供することです。
ありがとう、私はちょうどその問題を考えすぎたと思います。 –