2017-05-18 8 views
-1

파이썬 클래스의 인스턴스가 일관성없이 작동합니다.python - 클래스 인스턴스의 일관성없는 동작

class A(): 
     def __init__(self, x): 
      self.x = x 
     def update(self, x): 
      self = A(x) 

    a = A(3) 
    a.update(5) 
    print a.x # prints 3 

왜 'X'속성이 첫 번째 코드에서 업데이트지고, 2 일에 업데이트 점점되지

Code.1

class A(): 
     def __init__(self, x): 
      self.x = x 
     def update(self, x): 
      self.x = x 

    a = A(3) 
    a.update(5) 
    print a.x # prints 5 

Code.2?

+1

재생할 수 없습니다. 이것은 (정확하게)''당신이 보여주고있는 코드를 실행하고 있습니까? – dhke

+0

@dhke : 죄송합니다. 두 번째 코드 스 니펫에서 실수를했습니다. 지금 확인하십시오. –

답변

1

self에게 할당하면 현재 개체가 변경되지 않습니다. 단지 (로컬) 자체 매개 변수 변수에 새로운 값을 할당합니다.

self 가져 유일한 특별 대우는 로컬 매개 변수의 값을 대체

a.update(x) 

self에 할당

A.update(a, x) 

에 해당한다는 의미에서, 호출 중입니다 :

def update(self, x): 
    # overwrite the value of self with a different instance of A 
    # This has no effect outside of update(). 
    self = A(x) 

a = A(3) 
a.update(5) 

e a은 여전히 ​​A(3)과 같은 인스턴스입니다. A의 새 인스턴스를 update() 안에 만들고 self 매개 변수에 할당했지만 해당 수정은 update() 외부로 이어지지 않습니다.