파이썬에서 키워드 args의 초기화
-
05-07-2019 - |
문제
다음과 같은 이유 :
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))
제휴하지 않습니다 StackOverflow