2017-12-01 7 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