1

someclass.funcの代わりに使うのがずっと夢でしsomeclass.func()た。について読みました@decorators。そして今、私は尋ねます:

どちらの方法が良いですか?

方法 1

class Main(object):

    def __init__(self):

        self.func()

    def func(self):

        print 'hi'

また...

方法 2

class Main(object):

    def __init__(self):

        self.func

    @property
    def func(self):

        print 'hi'

編集

コードは次のとおりです。 http://randomgalaxy.com/stackoverflow/python-property-vs-func/term.py

4

3 に答える 3

8

func本当に値を出力する場合は、いいえ、それをプロパティにすることは正しいことではありません。プロパティは、名前が示すように、オブジェクトに関連付けられている値です。そのため、@propertyデコレータを持つ関数は値を返すだけで、それ以外の副作用はありません。

于 2013-10-17T22:14:04.093 に答える
2

編集:実際のコードを読んだ後、間違いなく方法1

最も可能性が高い: 方法 1

しかし、それはあなたが実際にやろうとしていることに依存します。あなたが提示したこのケースは、単純化しすぎています。

@property デコレーターを使用することは、私の経験では、クラス メンバーを保護する方法 (読み取りのみを許可する)、変数の設定/読み取り時に簿記を行う方法、またはメンバーのような関数へのアクセスを提供する方法のいずれかです (つまり、値を取得するために追加の計算が必要な場合でも、要求した値を返すだけです)。私は個人的に遅延評価に使用するのが好きです

于 2013-10-17T22:21:30.943 に答える
1

プロパティはでなければなりません。関数ではありません。
例:

class Foo(object):
    def __init__(self, a, b):
        self.__a = a
        self.__b = b

    @property
    def a(self):
        return self.__a

    @property
    def b(self):
        return self.__b

この例では、値は非公開であり、変更できません。

それで、そこで何か他のことをするのは悪い考えですか?つまり、スクリプト関数で変数が変更され、別の関数が呼び出される – Vik2015 45 秒前

とてもスタイルが悪いです。あなたはルビーではありません:)

于 2013-10-17T22:15:06.083 に答える