[PYTHON] 클래스 변수는 파이썬의 모든 인스턴스에서 공유됩니까? [복제]
PYTHON클래스 변수는 파이썬의 모든 인스턴스에서 공유됩니까? [복제]
일주일 전에 파이썬으로 코딩을 시작했는데, 실수로 코딩을 시작 했으므로 곧 oops, 클래스 및 객체를 사용하여 코딩을 시작했습니다. 내 C + + 실력이 도움이 될 것이라고 생각 .... 나는 다음 코드에 의해 조금있어
class A:
var=0
list=[]
def __init__(self):
pass
여기서 놀랍게도, var와 list는 일종의 전역 변수이며, 모든 인스턴스에서 공유됩니다. ... 모든 인스턴스에서 다른 것을 느꼈습니다 ..... 알아 내려면 반나절이 걸렸습니다. 그 .... 변수가 클래스 개체에 의해서만 액세스 할 수 있지만, 모든 인스턴스에서 공유됩니다 ....... 그냥 호기심, 거기에 이유가 뒤에 ??? ??
해결법
-
==============================
1.var은 instance.var 또는 self.var를 사용하여 액세스하는 한 확실히 공유해서는 안됩니다. 그러나 목록을 사용하면 클래스가 평가되고 하나의 목록 인스턴스가 만들어져 클래스 dict에 바인딩되므로 구문이 수행하는 작업이 수행되므로 모든 인스턴스가 동일한 목록을 갖게됩니다. instance.list = somethingelse resp를 설정할 때마다. self.list = somethingelse, 인스턴스 레벨 값을 가져와야합니다.
var은 instance.var 또는 self.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']
-
==============================
2.이들은 기본적으로 Java의 정적 변수와 같습니다.
이들은 기본적으로 Java의 정적 변수와 같습니다.
// Example equivalent Java class A { static int var = 0; static String[] list; }
이는 의도 한 동작입니다. 클래스 변수는 클래스에 대한 것입니다.
일반적인 인스턴스 변수의 경우 생성자에서 선언합니다.
class A: def __init__(self): self.var = 0 self.list = []
파이썬에서 정적 클래스 변수를 살펴볼 수 있습니다.
-
==============================
3.그 이유는 Python 클래스에서 다른 것과 같이 실행되는 실행 문이 있기 때문입니다. 클래스 정의의 본문은 클래스가 정의 될 때 한 번 실행됩니다. 거기에 라인 줄 var = []가 있으면 한 번만 실행되므로 해당 줄의 결과로 하나의 목록 만 만들 수 있습니다.
그 이유는 Python 클래스에서 다른 것과 같이 실행되는 실행 문이 있기 때문입니다. 클래스 정의의 본문은 클래스가 정의 될 때 한 번 실행됩니다. 거기에 라인 줄 var = []가 있으면 한 번만 실행되므로 해당 줄의 결과로 하나의 목록 만 만들 수 있습니다.
-
==============================
4.var에 대해이 동작이 표시되지 않는다는 것을주의하십시오. list에 대해서만 볼 수 있습니다.
var에 대해이 동작이 표시되지 않는다는 것을주의하십시오. list에 대해서만 볼 수 있습니다.
>>> class A: ... var = 0 ... list = [] ... >>> a1 = A() >>> a2 = A() >>> a1.var = 3 >>> a2.var 0
from https://stackoverflow.com/questions/11040438/class-variables-is-shared-across-all-instances-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] pytz를 사용하는 날짜 / 시간대 변환 (0) | 2018.10.08 |
---|---|
[PYTHON] JDBC로 술어 푸시 다운 작업을 유발합니까? (0) | 2018.10.08 |
[PYTHON] 파이썬에서리스트 삽입하기 [duplicate] (0) | 2018.10.08 |
[PYTHON] 파이썬, TypeError : unshashable 타입 : 'list' (0) | 2018.10.08 |
[PYTHON] 내 전역 변수에 파이썬으로 할당 할 수없는 이유는 무엇입니까? (0) | 2018.10.08 |