2013-03-28 3 views
1

내 프로그램은 len (list)를 호출하고, len에 대한 나의 정의는 다음과 같습니다. 이중 연결리스트의 길이 implentation, 파이썬

def __len__(self): 
    if not self.head: 
     return '[]' 
    else: 
     return self.size 

내가 그래서 기본적으로 내가 목록이 비어있을 때 '[]', 그렇지 않으면 내가 길이를 반환해야 반환해야

assert len(testList) == 0, "List should be empty, but length is %r" % len(testList) 
TypeError: __len__() should return an int 

를 얻을 오류입니다. 어떻게해야할까요?

+0

빈리스트의 길이에 대한''[] ''반환은 요구 사항을 잘못 읽은 것처럼 보입니다. 왜 0을 반환하지 않을까요? –

답변

4

반환 값 __len__이어야합니다. int이어야합니다. 목록이 비어 있으면 0을 반환합니다. docs에서


:

(내장 함수 렌을 구현하기 위해 호출
object.__len__(self) 

). 정수의 길이를 반환해야합니다. 메서드를 정의하지 않고 __len__() 메서드가 0을 반환하는 개체는 부울 컨텍스트에서 false로 간주됩니다.

+1

일관성을 위해'self.head'가 아닌데'self.size = 0'을 가지고 __len__에'self.size'를 리턴하도록 코드를 만들 것입니다. – khachik

1

__len__는 오류가 말한다 무엇 int> = 0 페이지 docs
를 반환해야합니다.

int이 아닌 문자열 ('[]')이 반환되므로이 오류가 발생합니다.
0을 반환하는 것이 더 적절합니다.