2010-03-09 5 views
2

저는 파이썬을 처음 사용합니다. 나는 시작하는 방법이 : 나는 다른 경우에 성공적으로 len()라고 한왜 파이썬에서`len (list)`를 찾을 수 없습니까?

def foo(self, list): 
    length = len(list) 

하지만, 여기에 내가 얻을 :

TypeError: object of type 'type' has no len() 

가 어떻게 전달이 개체가 목록이라고 파이썬을 확신합니까? 내가 뭘 놓치고 있니?

+5

이 오류를 재현 할 수 없습니다. 그리고 나는 그것이 왜 효과가 없어야하는지 알지 못합니다. 물론'list' 매개 변수는'list' 유형을 숨기지 만,'len'을 호출 할 수 있어야합니다. 그 오류로 실패 할 수있는 최소한의 목록을 제공 할 수 있습니까? –

+0

죄송합니다. 시간이 없습니다. 나는 그 이름을 '처음'으로 바꿨다. –

+1

-1 : "죄송합니다. 그럴 시간이 없습니다." 우리가 도울 수있는 충분한 정보를 제공 할 수 없습니까? 죄송합니다 더 도움이 될 수는 없지만 더 많은 정보가 없으면 우리는 추측하고 있습니다. –

답변

5

list은 목록 유형의 이름입니다.

다른 이름을 사용하십시오.

def foo(self, lst): 
    length = len(lst) 

그리고이 같은 foo를 호출하지 않았는지 확인하십시오

Foo.foo(list) 
+1

그건 의미가 없으며, 문제를 일으키지 않을 것입니다. 매개 변수 나 변수는 어떤 이름이라도 가질 수 있습니다. 심지어 내장 문자를 가리키는 이름도 포함될 수 있으며 실제 값 대신 내장 변수를 마술처럼 참조하지는 않습니다. –

+0

아마 편집 후에 더 많은 의미가 있지만 KennyTM는 "list"라고하는 것을 전달하는 메서드를 호출하지 말라고 말하고 있다고 생각합니다 (다른 것을 의미하기 위해 덮어 쓰지 않는 한). 내 생각에 우리 중 대부분은 내장 언어와 동일한 이름을 사용하는 것이 언어를 배울 때 문제와 혼란에 빠질 수있는 확실한 방법이라고 생각합니다. 코더는 내장 함수를 덮어 쓰거나 섀도우 잉하려는 경우가 아니라면 모범 사례로이를 피해야합니다. – Matthew

2

listtype()을 부르는 것 같습니다. 유형 자체입니다. 이미 기본 제공 유형이므로 목록에 list이라는 이름을 사용하지 마십시오. L 또는 mylist 또는 무엇이든 사용하면 효과가 있습니다.

5

당신이있어 내장을 그림자. foo 메서드에 전달할 값은 목록 개체가 아니고 길이가없는 list 유형입니다.

관련 문제