본문 바로가기
파이썬

파이썬 클래스 변수는 파이썬의 모든 인스턴스에서 공유됩니까?

by º기록 2021. 2. 14.
반응형

나는 일주일 전에 파이썬으로 코딩을 시작했는데, 곧 oops, classes 및 object를 사용하여 코딩을 시작한 것은 내 실수입니다. 나는 나의 C ++ 능력이 도움이 될 것이라고 생각했다 .... 나는 다음 코드에 의해 조금 얻었다

class A:
     var=0
     list=[]
     def __init__(self):
            pass

놀랍게도 var와 list는 일종의 전역 변수입니다. 모든 인스턴스에서 공유됩니다 .... 모든 인스턴스에서 달라 졌다고 생각했습니다 ..... 알아내는 데 반나절이 걸렸습니다. that .... 변수는 클래스 객체에서만 액세스 할 수 있지만 모든 인스턴스에서 공유된다는 것은 이해가되지 않습니다 .... Just Curious, 그 뒤에 이유가 있습니까 ??? ??

 

해결 방법

 

instance.var 또는 self.var 로 액세스하는 한 var 를 공유해서는 안됩니다. 그러나 목록을 사용하면 문이 클래스가 평가 될 때 하나의 목록 인스턴스가 생성되고 클래스 dict에 바인딩되므로 모든 인스턴스가 동일한 목록을 갖게됩니다. instance.list = somethingelse resp를 설정할 때마다. self.list = somethingelse , 인스턴스 수준 값을 가져와야합니다.

시간 예 :

>>> class A():
...     var = 0
...     list = []
...
>>> a = A()
>>> b = A()
>>> a.var
0
>>> a.list
[]
>>> b.var
0
>>> b.list
[]
>>> a.var = 1
>>> b.var
0
>>> a.list.append('hello')
>>> b.list
['hello']
>>> b.list = ['newlist']
>>> a.list
['hello']
>>> b.list
['newlist']

 

참조 페이지 https://stackoverflow.com/questions/11040438

 

 

반응형

댓글