2010-04-20 5 views
0

Python에서 클래스 목록을 생성하는 데 문제가 있습니다. 내가 간과하고있는 간단한 것이 있다는 것을 알고 있지만, 나는 그것을 이해할 수 없다. 지금까지Python에서 목록 클래스 생성

내 기본 코드 :

class Test: 
    def __init__(self,test): 
     self.__test = test 

내 문제는 내가

t = Test([1,3,5]) 
을 입력하면

일이 잘 작동하지만, 내가

t = Test() 

를 추가하면 내가 얻을 수 있다는 것입니다 내가 충분한 매개 변수를 입력하지 않은 오류.

나는 기본 매개 변수, 작품의 일종으로

def __init__(self,test=[]) 

을 추가하는 시도했지만, 나는 고유 목록이 없습니다.

나는 계속해서 살펴 봤는데, 내가 뭘 잘못하고 있는지 알 수 없다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

무슨 뜻 이죠 기울기? – KillianDS

+0

여기를 참조하십시오 : http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – balpha

+3

속성에 두 자리 수의 밑줄 이름을 사용 했으므로 http://stackoverflow.com/questions/165883/python-object-attributes-methodology-for-access/166098#166098 –

답변

4

나는 당신이 무엇을 찾고 있는지 정확히 모르겠지만, 당신은 아마 기본으로 None를 사용하려면 :

class Test: 
    def __init__(self,test=None): 
     if test is None: 
      self.__test = [] 
     else: 
      self.__test = test 
+2

두 개의 가지가 조금씩 편재되어 있습니다. 'is None' 브랜치에서도'self .__ test '에 할당하거나'else'없이'if' 다음에 할당을하십시오. –

+0

@ 토마스 윌터스 : 네 말이 맞아. 나는 그것을 고쳤다. –

+0

이것은 내가 문제가있는 곳입니다. 비슷한 것을 시도했지만 테스트의 기본값으로 '없음'을 사용하지 않았습니다. 이것은 내 프로그램을 바로 잡았습니다. 도움과 추가 독서를 위해 모두에게 1 톤 감사합니다! – Jef

3

다음과 같은 관용구 사용할 수 있습니다

class Test: 
    def __init__(self,test=None): 
     self.__test = test if test is not None else [] 
+0

+1. 내 대답과 같은 개념이지만보다 간결한 구문. –

+0

Yuck, 삼항 표현. –

+0

@Thomas Wouters : 나는 어떤 사람들이 그렇게 느낄지도 모른다고 생각했습니다. 그래서 나는 내 대답을 그대로 남겨두고있다. –

3

기본값 인수는 함수가 정의 될 때 한 번 평가됩니다. 따라서 다음을 수행하십시오.

t 그는 ''에 대한 모든 호출간에 test 인수를 지정하지 않으면 '테스트'목록을 공유합니다. 당신이 일반적으로 이렇게 표현합니다 : (. 그것은 분명, None 전달 될 때 또는)이 test 인수를 전달되지 않습니다 각 호출에 대해 새리스트를 생성

def __init__(self, test=None): 
    if test is None: 
     test = [] 

당신이 독특한와

+1

설명을 주셔서 감사합니다. 나는 그 일이 일어났다는 것을 알고 있었고, 나는 그 문제를 완화 할 수있는 적절한 방법을 알지 못했습니다. 크게 감사드립니다! – Jef