2017-02-17 12 views
0

私はFileHandlerクラスのインスタンスを使ってPythonでスクリプトをプログラミングしていますが、2番目は同じであっても、変数に代入されることなく、最初に上書きされます。このクラスのインスタンスが上書きされるのはなぜですか?

クラス:

class FileHandler(): 

    name = None 
    path = None 

    @classmethod 
    def __init__(self,name,path): 
     self.name=name 
     self.path=path 

    @classmethod 
    def getName(self): 
     return self.name 

    @classmethod 
    def getPath(self): 
     return self.path 

スクリプト:

import fileHandler 

origen=fileHandler.FileHandler('a','b') 
destino=fileHandler.FileHandler('c','d') 

print origen.getName(),origen.getPath() 
print destino.getName(),destino.getPath() 

結果:

c d 
c d 
+4

あなたはクラスメソッドを作成したので、実際にはクラスがあります。すべてのインスタンスがこれらの値を共有します。 – pvg

+3

@Marco '@ classmethod'は何をすると思いますか?クラスメソッドは何と思いますか? – Wombatz

+0

クラスメソッドの使用を停止する –

答えて

2

あなたはclass方法として__init__方法を使用しています。すべてのメソッドのため@classmethodを使用して

はVARSが上書き理由です、シングルトンになります。

+0

'@ classmethod'を削除した場合、変数を割り当てていないようです。出力は次のようになります。古い値ではなく、なし。 – Marco

+0

@MarcoAntonioAraújoMatarazzo**あなたがゲッターを作ったから(とにかく使ってはいけない)クラスメソッド!したがって、クラスレベルの属性 'name'と' path'を取得します。これは明示的に 'None'に設定されています。あなたのコードで@classmethodが出現するたびにそれを削除し、あなたのクラスの最上部で 'name = None'と' path = None'を削除してください。インスタンス属性をどうやって作っているのですか?* –

関連する問題