リモート サーバーに格納されているオブジェクトを表す短いクラスを作成しようとしています。オブジェクトの属性をリモートサーバーに設定せずにローカルに設定することは、一般的に悪い考えだと思います。これは、ローカル オブジェクトがもはやリモート オブジェクトを表していないことを意味し、その事実を意識することさえありません。
これを処理するために、以下のようなコードを使用することを計画していました。設定したい場合は自分の足を撃つことができますがitem.name
、ユーザーは賢明であり、そうしないと想定しています.
class Item(object):
def __init__(self):
self.name = get_item_name()
def set_name(self, name):
try:
set_item_name(name)
except:
handle_error()
raise
else:
self.name = name
@property
しかし、最近デコレータに出くわしたので、以下を書くことができました:
class Item(object):
def __init__(self):
self._name = get_item_name()
@property
def name(self):
return self._name
@name.setter
def name(self, value):
try:
set_item_name(value)
except:
handle_error()
raise
else:
self._name = value
これには、 を使用した属性アクセスを引き続き許可するだけでなく、割り当てitem.name
も処理できるという利点があります。item.name = blah
ただし、コードの 2 番目のブロックは (私にはそう思われる) より優れた動作を提供しますが、属性設定で関数呼び出しを非表示にし、Zenの「明示的は暗黙的よりも優れている」と Python クラスがすべきという一般的な考えを考慮します。ユーザーから物事を隠すのではなく、これにより 2 番目のコード ブロックの Pythonic が少なくなりますか?