TL; DR:プロパティごとにゲッターとセッターの固有のセットを定義する必要があります。ジェネリックゲッターとセッターを定義し、必要な変数でそれらを使用できますか?Python:ジェネリックゲッターとセッター
はのは、私はいくつかの素晴らしいgetterとsetterを持つクラスを作りましょう:
class Foo
def getter(self):
return _bar+' sasquatch'
def setter(self, value):
_bar = value+' unicorns'
bar = property(getter, setter)
かなり素晴らしい、右?
ここで、私は "baz"という別の変数を入れて、このサスクワッチ/ユニコーンの楽しみから除外したくないとしましょう。まあ、私はゲッターとセッターの別のセットにすることができると思います:
class Foo
def bar_getter(self):
return _bar+' sasquatch'
def bar_setter(self, value):
_bar = value+' unicorns'
bar = property(bar_getter, bar_setter)
def baz_getter(self):
return _baz+' sasquatch'
def baz_setter(self, value):
_baz = value+' unicorns'
baz = property(baz_getter, baz_setter)
をしかし、それは非常に乾燥し、不クラッタ私のコードではありません。 DRYer:
class Foo
def unicornify(self, value):
return value+' unicorns'
def sasquatchify(self, value):
return value+' sasquatch'
def bar_getter(self):
return self.sasquatchify(_bar)
def bar_setter(self, value):
_bar = self.unicornify(_bar)
bar = property(bar_getter, bar_setter)
def baz_getter(self):
return self.sasquatchify(_baz)
def baz_setter(self, value):
_baz = self.unicornify(_baz)
baz = property(baz_getter, baz_setter)
これは私のコードDRYerを作成するかもしれませんが、それは理想的ではありません。さらに2つの変数を統一してsasquatchifyしたい場合は、さらに4つの関数を追加する必要があります。
これを行うには良い方法があるに違いありません。複数の変数にわたって単一のジェネレータまたはセッタを使用できますか?
ユニコーンレスとサスカッチレス実世界の実装:私はSQLAlchemyのORMを使用して、格納およびデータベースからそれを取得する際にデータの一部を変換したいんです。変換の中には、複数の変数に適用できるものがあり、getterやsetterでクラスを混乱させたくありません。
を与えるが、ラムダは私が必要なものには適していませんこれは、単一の表現にセッターとゲッターを制限行う。 –
@TheronLuhn同じことをしますが、一般的な関数( 'sasquatchicorn'の内部関数として定義されているか、引数として名前を取る)を使用します。または、[agf](http://stackoverflow.com/a/10149431/344821)の回答のように完全な記述子を処理してください。 – Dougal
また、私の編集では、完全な記述子を行うよりも多少作業が少なくて済みますか?多分? :) – Dougal