5

次のコードを検討してください。

def apples():
    print(apples.applecount)
    apples.applecount += 1

apples.applecount = 0
apples()
>>> 0
apples()
>>> 1
# etc

これは良い考えですか、悪い考えですか、それとも自分自身を破壊する必要がありますか? なぜこれが必要なのか疑問に思っている場合は、4 秒ごとに繰り返される関数を取得しましたwin32com.client.Dispatch()。これを使用すると、Windows COM を使用してアプリケーションに接続します。そのリンクを 4 秒ごとに再作成する必要はないと思います。もちろん、グローバル変数を使用することもできますが、これも有効な方法かどうか疑問に思っていました。

4

2 に答える 2

5

クラスのインスタンス変数を使用してカウントを保持する方がより慣用的です。

class Apples:
    def __init__(self):
        self._applecount = 0

    def apples(self):
        print(self._applecount)
        self._applecount += 1

a = Apples()
a.apples()  # prints 0
a.apples()  # prints 1

参照なしで関数自体のみを参照する必要がある場合はa、次のようにすることができます。

a = Apples()
apples = a.apples

apples()  # prints 0
apples()  # prints 1
于 2013-10-17T21:30:09.153 に答える
4

これは基本的に名前空間付きのグローバルです。関数apples()はグローバル オブジェクトであり、そのオブジェクトの属性も同様にグローバルです。

通常のグローバル変数よりわずかに優れているだけです。結局のところ、一般的に名前空間は良い考えです。

于 2013-10-17T21:26:40.230 に答える