복붙노트

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

PYTHON

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

일주일 전에 파이썬으로 코딩을 시작했는데, 실수로 코딩을 시작 했으므로 곧 oops, 클래스 및 객체를 사용하여 코딩을 시작했습니다. 내 C + + 실력이 도움이 될 것이라고 생각 .... 나는 다음 코드에 의해 조금있어

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

여기서 놀랍게도, var와 list는 일종의 전역 변수이며, 모든 인스턴스에서 공유됩니다. ... 모든 인스턴스에서 다른 것을 느꼈습니다 ..... 알아 내려면 반나절이 걸렸습니다. 그 .... 변수가 클래스 개체에 의해서만 액세스 할 수 있지만, 모든 인스턴스에서 공유됩니다 ....... 그냥 호기심, 거기에 이유가 뒤에 ??? ??

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    3.그 이유는 Python 클래스에서 다른 것과 같이 실행되는 실행 문이 있기 때문입니다. 클래스 정의의 본문은 클래스가 정의 될 때 한 번 실행됩니다. 거기에 라인 줄 var = []가 있으면 한 번만 실행되므로 해당 줄의 결과로 하나의 목록 만 만들 수 있습니다.

    그 이유는 Python 클래스에서 다른 것과 같이 실행되는 실행 문이 있기 때문입니다. 클래스 정의의 본문은 클래스가 정의 될 때 한 번 실행됩니다. 거기에 라인 줄 var = []가 있으면 한 번만 실행되므로 해당 줄의 결과로 하나의 목록 만 만들 수 있습니다.

  4. ==============================

    4.var에 대해이 동작이 표시되지 않는다는 것을주의하십시오. list에 대해서만 볼 수 있습니다.

    var에 대해이 동작이 표시되지 않는다는 것을주의하십시오. list에 대해서만 볼 수 있습니다.

    >>> class A:
    ...     var = 0
    ...     list = []
    ... 
    >>> a1 = A()
    >>> a2 = A()
    >>> a1.var = 3
    >>> a2.var
    0
    
  5. from https://stackoverflow.com/questions/11040438/class-variables-is-shared-across-all-instances-in-python by cc-by-sa and MIT license