0

Cっぽい言語では、次のようなゲッター/セッターメソッド/関数でデータストレージの詳細をマスクします。

int getFoo();
void setFoo(int value);

私はいくつかのPythonを持っています:

class MyClass:
    def Foo(self):
        ...magic to access foo...
        return value

Fooのセッターを書く/名前を付ける正しい方法は何ですか? 言語機能というより慣用句だと思いますが、何が一般的かはわかりません。Foo()に名前を変更してgetFoo()、 と一致させる必要があるかもしれませんsetFoo()。それが通常のやり方ならそれでいいと思います。

4

3 に答える 3

2

プロパティを使用できます。これはドキュメントから直接取得されます:

class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

今、あなたはできる...

c = C()
c.x = "a"
print c.x
>>> "a"
del c.x

objectPython 3 より前のバージョンの Python (Python 2.7 など) では、このようなプロパティをサポートするには、オブジェクトが新しいスタイルのクラス ( から派生する必要がある) であることを確認する必要があることに注意してください。確かに、とにかくすべてのクラスに新しいスタイルのクラスを使用する必要があります...

于 2012-08-15T15:13:05.680 に答える
1

組み込みのプロパティ関数を使用します。

class MyClass:

    def __init__(self):
        self._value = 'Initialize self._value with some value or None'        

    def get_foo(self):
        ...magic to access foo...
        return self._value

    def set_foo(self, value):
        ... magic processing for value ...
        self._value = value

    foo = property(get_foo, set_foo)

これで、次のように access を使用できます。

inst = MyClass()
inst.foo = 'Some value'
print inst.foo

それは印刷されます:

「ある程度の価値」

于 2012-08-15T15:16:43.100 に答える
0

通常、Python ではゲッターとセッターを使用する必要はありません。

@propertyただし、プロシージャの結果をプロパティとして公開する場合は、デコレータを使用できます。

class MyClass:
    @property
    def foo(self):
        # operation
        return value

    @foo.setter
    def foo(self, value):
        # operation storing value

の値をfoo属性に格納するだけの方が一般的です。__init__これは、インスタンス初期化子で計算できます。

class MyClass:
    def __init__(self):
        self.foo = someCalculationDeterminingFoo()
于 2012-08-15T15:12:49.043 に答える