2017-12-01 33 views
0

別のファイルのメソッドを使ってメインファイルのクラス辞書を変更したい。私がこのメソッドを呼び出すと、それは仕事のように機能しますが、辞書がメインファイルから再び呼び出されると、追加されたエントリが失われます。Python:別のファイルのメソッドでクラス変数を変更する

メインファイル、testmain.py

import testside 


class MainClass(object): 
    objects = {'three': 'four'} 


if __name__ == '__main__': 

    testside.SideClass.add_to('one', 'two') # prints {'three': 'four', 'one': 'two'} 
    print(MainClass.objects)    # prints {'three': 'four'} 

サイドファイル、testside.py

import testmain 


class SideClass(object): 

    @staticmethod 
    def add_to(name, thing): 
     testmain.MainClass.objects[name] = thing 
     print(testmain.MainClass.objects) 

私はファイルの外部からのクラス値を変更するには何ができますか?私はMainClass()のインスタンスを作成したくないことに注意してください。

+0

周期的なインポートを作成しているので、この例はうまくいかないはずです –

+0

ありがとう、私は周期的なインポートについて心配しています。あなたは何かお勧めしますか? – ezlur

答えて

0

SideClassは、MainClassクラスの独自のコピーをインポートしています。 MainClassは既に独自のファイルで読み込まれているので、変更したいコピーを渡す必要があります(インスタンスではありませんが!)。

これは動作します: メインファイル、testmain.py

import testside 

class MainClass(object): 
    objects = {'three': 'four'} 


if __name__ == '__main__': 
    testside.SideClass.add_to(MainClass, 'one', 'two') # prints {'three': 'four', 'one': 'two'} 
    print(MainClass.objects)    # prints {'three': 'four', 'one': 'two'} 

サイドファイル、testside.py

class SideClass(object): 

    @staticmethod 
    def add_to(cls, name, thing): 
     cls.objects[name] = thing 
     print(cls.objects) 

ボーナスとして、あなたは、もはやインポートする必要がありませんSideClassのMainClassを使用して、任意のクラスに対してSideClassを動的に使用できます。

私は質問するように強く感じますが、なぜこれをしたいですか?問題はX-Y問題の問題です。

+0

私はオブジェクトのリストで辞書を作成する必要があります。どこからでも(anyfile?)名前で簡単にアクセスできるようにする必要があるので、プログラムのメインファイルに辞書を作成するのが最も簡単な方法だと思いました。 – ezlur

関連する問題