2012-09-28 5 views
1

편집 : 방금 알아 낸 것처럼 "싱글 톤"은 파이썬에서 유용하지 않습니다. 파이썬은 대신 "Borg"를 사용합니다. 보그와 http://wiki.python.de/Das%20Borg%20Pattern 나는 & 같은 다른 클래스에서 전역 변수를 읽고 쓸 수 있었다 :전역 변수 및 목록 읽기 및 쓰기

b1 = Borg() 
b1.colour = "red" 
b2 = Borg() 
b2.colour 
>>> 'red' 

하지만 같은 보그와 함께 목록을 생성/읽기하지이 수 이었다

b1 = Borg() 
b1.colours = ["red", "green", "blue"] 
b2 = Borg() 
b2.colours[0] 

이인가 보그가 지원하지 않는 것? '예'인 경우 : & 다른 클래스의 글을 읽을 수있는 전역 목록을 만들려면 어떻게해야합니까?


원래 질문 :

나는 &가 다른 클래스에서 전역 변수를 쓰기 읽고 싶어. 의사 코드 :

class myvariables(): 
    x = 1 
    y = 2 

class class1(): 
    # receive x and y from class myvariables 
    x = x*100 
    y = y*10 
    # write x and y to class myvariables 

class class2(): 
    # is called *after* class1 
    # receive x and y from class myvariables 
    print x 
    print y 

printresult는 "100"과 "20"이어야합니다. "Singleton"이이 작업을 수행 할 수 있다고 들었지만 "Singleton"에 대한 좋은 설명을 찾지 못했습니다. 이 간단한 코드를 어떻게 작동시킬 수 있습니까?

답변

2

Borg 패턴 클래스 attrs는 새 인스턴스 호출에서 재설정되지 않지만 인스턴스 attrs는 재설정됩니다. 이전에 설정된 값을 유지하려면 인스턴스 attrs 대신 클래스 attrs를 사용해야합니다. 아래 코드는 원하는 것을 할 것입니다.

class glx(object): 
    '''Borg pattern singleton, used to pass around refs to objs. Class 
    attrs will NOT be reset on new instance calls (instance attrs will). 
    ''' 
    x = '' 
    __sharedState = {} 
    def __init__(self): 
     self.__dict__ = self.__sharedState 
     #will be reset on new instance 
     self.y = '' 


if __name__ == '__main__': 
    gl = glx() 
    gl.x = ['red', 'green', 'blue'] 
    gl2 = glx() 
    print gl2.x[0] 

포인트를 증명하려면 인스턴스 attr y를 사용하여 다시 시도하십시오. 불행한 결과가 발생합니다.

행운, 마이크