2017-10-22 17 views
-2

私はこのクラスをPythonで持っています。 (不必要な部分を削除しました)クラスコンストラクターが呼び出されるたびに属性を更新します

class Spillebrett: 

    def __init__(self, rader, kolonner): 
     self._rader = rader 
     self._kolonner = kolonner 
     self._generasjonsnummer = 0 

私はクラスを実行するたびに1を_generasjonsnummerに追加する必要があります。 _generasjonsnummer + = 1を試してみるとエラーが出ます。私は(デフaddGenerasjonsnummerを作ってみました)などのようにのinitでそれを呼び出す:

class Spillebrett: 

    def __init__(self, rader, kolonner): 
     self._rader = rader 
     self._kolonner = kolonner 
     self._generasjonsnummer = 0 
     addGenerasjonsnummer() 

    def addGenerasjonsnummer(): 
     self._generasjonsnummer += 1 

しかし、私はのinitで関数を呼び出す傾けます。私が必要とするのは、initを開始するたびに+ = 1に更新するための番号です。これはどうすればいいですか?

+0

あなたは間違いなく、代わりに、クラス属性としてそれを宣言する必要があります。 –

+2

これは[奇妙なこと](https://stackoverflow.com/q/46872751/3001761)のようです。 – jonrsharpe

+0

@jonrsharpe残念なことに、どちらももう一方の欺瞞として閉じられることはありません。 –

答えて

3

クラスに、コンストラクタが呼び出されるたびにインクリメントされる属性がある場合は、それをどのインスタンスにも関連付ける必要があります。つまり、クラス属性として__init__の外側に宣言します。

私はこれらの線に沿って何かをお勧めします:

In [625]: class Spillebrett: 
    ...:  ctr = 0 
    ...:  def __init__(self): 
    ...:   print(Spillebrett.ctr) 
    ...:   Spillebrett.ctr += 1 
    ...:   

In [626]: Spillebrett() 
0 
Out[626]: <__main__.Spillebrett at 0x10b918da0> 

In [627]: Spillebrett() 
1 
Out[627]: <__main__.Spillebrett at 0x109f1af98> 

In [628]: Spillebrett() 
2 
Out[628]: <__main__.Spillebrett at 0x10b918470> 
関連する問題