3

簡単なクラスがあります:

class A(object):

    __COUNTER = 0

    def do_something_1(self):
        ...

    def do_something_2(self):
        ...

    def do_something_N(self):
        ...

self.__COUNTERメソッドを呼び出すことで増加できるが、各関数に書き込まない決定はありますか?

私は次のように欲しい:

a = A()
# COUNTER = 1

b = A()
# COUNTER = 2

c = A()
# COUNTER = 3
4

2 に答える 2

3

簡単なバージョンは次のとおりです。特定の関数が呼び出されるたびにクラス全体のカウンターをインクリメントする方法。関数は__init__、特定の質問をカバーする にすることができます。

class cls(object):
    counter = 0

    def __init__(self):
        self.__class__.counter += 1
        print self.__class__.counter

a = cls()  # Prints 1
b = cls()  # Prints 2

ご覧のとおり、コツはself.__class__.counterではなくをインクリメントすることself.counterです。これは、任意のメンバー関数内で行うことができます。

ただし、二重アンダースコアで始まる名前は使用しないでください。これは、Python にとって特別な意味を持つためです (もちろん、特別な意味を知っていて、それが必要な場合を除きます)。カウンターをプライベートとしてフラグ付けする場合は、単一のアンダースコアを使用します: _counter.

于 2013-06-21T11:26:47.010 に答える