2012-03-06 5 views
4

Pythonでsetterとgetterを定義する最も簡単な方法は何ですか? C#のようなものがありますかPythonでsetterとgetterを定義する最も簡単な方法は何ですか

public int Prop {get; set;} 

このようにするには?このように1つのプロパティに対してsetterメソッドとgetterメソッドの両方を書き込むことは、あまりにも多くの作業です。

class MyClass(): 
    def foo_get(self): 
     return self._foo 

    def foo_set(self, val): 
     self._foo = val 

    foo = property(foo_get, foo_set) 

ありがとうございます!

+0

あなたは= valの上self._fooを意味考える:あなたは、ロジックが必要な場合は、あなたは、これらのプロパティメソッドを使用すると、基本的な属性値と同じ方法を使用することができますpropertys

class Foo(object): def __init__(self, db): self.db = db @property def x(self): db.get('x') @x.setter def x(self, value): db.set('x', value) @x.deleter def x(self): db.delete('x') 

を使用することができます –

+0

@ sr2222ちょうどそれを更新しました。ありがとう! – zsong

答えて

17

setterとgetterが基本となる実属性にアクセスする以外に何もしない場合、それらを実装する最も簡単な方法は、セッターとゲッターをまったく書き込まないことです。これは標準的な振る舞いであり、属性が持っている振る舞いを再現する関数を書くことには意味がありません。

プロパティを導入してもインターフェイスが破壊されることはないので、アクセスロジックが標準のアクセスメカニズムとは異なるものに変更された場合に、カプセル化を確実に行うためにゲッタとセッタは必要ありません。

Python Is Not Java.(ではなく、C#のいずれか、そのことについては。)

+0

を実装すると、自動補完ツールが容易になります。 – squid

1

propertyがそれらを使用してthis linkを参照してください、Pythonでbuiltin functionです。これは括弧なしで動作するので、Svenの属性を使用するだけの設定から始め、後でgetterとsetterを使うように変更することができます。

7

通常、セッター/ゲッターは一切書きません。 Pythonは誰でも属性に直接アクセスすることを妨げないので、何の指摘もありません。

foo = Foo(db) 
foo.x 
foo.x = 'bar' 
del foo.x 
関連する問題