2011-09-07 11 views
2

좋아요. 두 클래스가 있고 하나는 다른 클래스에 종속되어 있습니다. 그래서 첫 번째 클래스에서 변수를 가져와 두 번째 클래스에서 사용해야합니다. 그러나 두 번째 변수는 계속 변경됩니다. 이처럼 :Python : 클래스/객체 간의 변수 공유

class class1 : 
    var1 = 0 
    def meth1 (self): 
     self.var1 += 1 
class class2: 
    var2 = class1.var1 
    def see (self): 
     return self.var2 
obj1 = class1() 
obj2 = class2() 

obj1.meth1() 
obj2.see() 

이 반환 0이 아닌 1 내가 VAR를 변경 클래스 하나 그것을 인쇄에서 인쇄 var1에 말을합니다. 하지만 class2가 가져올 때 여전히 0입니다 ... 나는 여전히 오래된 var1을 참조하는 것 같아요. 내가 뭘 잘못하고 무엇을해야합니까?

감사

+1

먼저. 클래스 이름을 대문자로하십시오. 둘째. 처음에 클래스 수준 변수를 사용하지 않는 이유는 무엇입니까? 당신의'var1'은 인스턴스 변수가 아닙니다. 왜 평범한 인스턴스 변수를 피하고 있습니까? –

+0

인스턴스 변수 란 무엇입니까? –

+0

그건 완전히 새로운 질문입니다. 1. 실제로 파이썬 튜토리얼 전체 **를 수행하십시오. 2. "Python Instance Variable"을 검색하십시오. 3. 전체 튜토리얼을 수행하고 파이썬 인스턴스 변수에서 수백 개의 웹 페이지를 읽은 후에 다시 질문하십시오. 그것은 근본적인 개념이며, 관련이없는 질문에 대한 언급에서 다루기가 어렵습니다. –

답변

6
class class2: 
    var2 = class1.var1 

이것은 class1.var1의 현재 값의 복사본입니다.

var2에서 현재 값을 복사하는 대신

사용 class1.var1 "나는 첫 번째 클래스에서 변수를 얻고 초에서 사용합니다."

+0

OH 그래서 내가 var1을 바꿀 때, var2는 여전히 var1이 무엇인지를 가리키고 있지 않습니까? 이제는 의미가 있습니다. 도와 주셔서 감사합니다! –

+0

그것이 바로 "복사"가 의미하는 것입니다. –

+1

파이썬에서 변수를 이해하는 데 도움이되는 매우 유용한 기사와 올바른 복사 방법 : http://henry.precheur.org/python/copy_list – Ski

0

변수가 coppied되는 방법에 대한 모든 정보는 true이며, 권장되는 기사를 잘 설명합니다. 하지만 class1.var1을 사용하면 self.var1의 값은 class1에서 절대로 나오지 않습니다. 다음과 같은 코드로 이유를 확인할 수 있습니다

당신과 self.var1 (라인 2 var1입니다) Class1.var1에 대해 서로 다른 ID를 얻을
class Class1 : 
var1 = 0 
def meth1 (self): 
    self.var1 += 1 
    print(id(self.var1)) 

class Class2: 
def meth2 (self): 
    print(id(Class1.var1)) 

obj1 = Class1() 
obj2 = Class2() 

obj1.meth1() 
obj2.meth2() 

. 당신이 Class2에서 self.var1의 값을 얻고 싶다면

, 당신은 클래스 외부 var1를 초기화하고, 당신이 그것에게 번호를 추가하는 기능 내부는 글로벌하게해야합니다

var1 = 0 
class class1 : 

    def meth1 (self): 
     global var1 
     var1 += 1 

class class2: 

    def meth2 (self): 
     print(var1) 

obj1 = class1() 
obj2 = class2() 

obj1.meth1() 
obj2.meth2()