2010-07-17 5 views
1

파이썬 (2.6.5)의 이러한 동작에 혼란 스럽다.파이썬 객체 인스턴스가 다른 인스턴스에 의해 부모 클래스로 상속 됨

class A: 
    def __init__(self): 
     self.mylist=[] 

그런 식으로 self.mylist 인스턴스 변수입니다 :

class A(): 
    mylist=[] 


class B(A): 
    j=0 
    def addToList(self): 
     self.mylist.append(1) 


b1 = B() 
print len(b1.mylist) # prints 0 , as A.mylist is empty 
b1.addToList() 
print len(b1.mylist) # prints 1 , as we have added to A.mylist via addToList() 

b2 = B() 
print len(b2.mylist) # prints 1 !!! Why ????? 

답변

2

당신은 할 필요가있다. 메서드 외부에서 정의하면 클래스 변수이므로 모든 인스턴스간에 공유됩니다. 당신은 당신이 명시 적으로 A의 생성자를 호출해야합니다 생성자를 정의하면 B에서

:

이것은 Python tutorial에 (안 매우 명확하게) 설명
class B(A): 
    def __init__(self): 
     A.__init__(self) 

. 당신은 아마 본 적이 무엇

class A(): 
    def __init__(self): 
     self.mylist=[] 

은 할 사람들이다 :

+0

감사합니다. 빨리! :-) – PyNoob123

+0

그냥 좋은 타이밍 :) – Skilldrick

2

이 코드는 모든 인스턴스 (또는 서브 클래스)

class A(): 
    mylist=[] 

싶은 것은 사이에서 공유으로 myList를 생성 :

class A(): 
    somevariable = a 
    def doit(self): 
     self.somevariable = 5 

서명. 그 전에 모든 A 인스턴스는 일부 변수의 동일한 복사본을 공유합니다. 만큼 복사본을 변경하지 않는만큼. 변수가에 할당되면, 다음에 바뀌기보다는 바뀝니다. 그 기술은 문제의 값이 변하지 않을 때만 안전합니다 (즉, 변경할 수는 없지만 대체 할 수는 있습니다). 그러나 실제로는 모든 변수를 할당해야합니다.

관련 문제