オブジェクトが一連のXMLコードで初期化されるクラスを作成します。このクラスには、そのXMLからさまざまなパラメーターを抽出し、それらをオブジェクト状態変数内にキャッシュする機能があります。これらのパラメータの潜在的な量は多く、おそらくユーザーはそれらのほとんどを必要としないでしょう。そのため、「遅延」初期化を実行することにしました。
次のテストケースでは、そのようなパラメータはtitle
です。ユーザーが初めてアクセスしようとすると、getter関数はXMLを解析し、状態変数を適切に初期化して、その値を返します。
class MyClass(object):
def __init__(self, xml=None):
self.xml = xml
self.title = None
def get_title(self):
if self.__title is None:
self.__title = self.__title_from_xml()
return self.__title
def set_title(self, value):
self.__title = value
title = property(get_title, set_title, None, "Citation title")
def __title_from_xml(self):
#parse the XML and return the title
return title
これは見栄えがよく、私にとってはうまく機能します。ただし、getter関数は、オブジェクトに非常に重大な副作用があるという意味で、実際には「セッター」関数であるという事実に少し不安を感じています。これは正当な懸念ですか?もしそうなら、私はそれにどのように対処すべきですか?