문제

다음과 같은 이유 :

class A(object):
    def __init__(self, var=[]):
        self._var = var
        print 'var = %s %s' % (var, id(var))

a1 = A()
a1._var.append('one')

a2 = A()

의 결과:

var = [] 182897439952
var = ['one'] 182897439952

선택적 키워드 인수를 사용할 때 왜 새로운 인스턴스를 사용하지 않는지 이해하지 못합니다. 누구든지 이것을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

함수 정의의 빈 목록은 함수 자체가 생성 될 때 한 번 생성됩니다. 함수가 호출 될 때마다 생성되지 않습니다.

매번 새로운 것을 원한다면 다음을 수행하십시오.

class A(object):
    def __init__(self, var=None):
        if var is None:
            var = []
        self._var = var

다른 팁

이것은 단순히 잘못입니다. (의미있게) 함수 선언에서 기본값으로 변이 가능한 객체를 제공 할 수 없습니다.

class A(object):
    def __init__(self, var=[]):
        self._var = var
        print 'var = %s %s' % (var, id(var))

당신은 이런 일을해야합니다.

class A(object):
    def __init__(self, var=None):
        self._var = var if var is not None else []
        print 'var = %s %s' % (var, id(var))

함수 정의의 빈 목록은 함수 자체가 생성 될 때 한 번 생성됩니다. 함수가 호출 될 때마다 생성되지 않습니다.

정확히. 이 주위에 작업하려면 아무도 할당하지 않고 기능 본체에서 아무것도 확인하지 않습니다.

class A(object):
    def __init__(self, var=None):
        if var is None:
            var = []
        self._var = var
        print 'var = %s %s' % (var, id(var))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top