2012-11-07 3 views
0
class lista(object): 
    listanumere=[] 
    def printer(self): 
     print self.listanumere 
    def adds(self,numar): 
     self.listanumere.append(numar) 

class movies(): 
    def __init__(self,ide,nume): 
     self.__nume=nume 
     self.__ide=ide 

listarez=lista 
a=movies(1,"David") 
lista.adds(a) 
lista.printer() 

오류 :어떻게 파이썬, 다른 클래스 목록에 하나 개의 클래스에서 요소를 추가하는

TypeError: unbound method adds() must be called with lista instance as first argument (got movies instance instead)   

그래서 내 질문은 : 다른 클래스에 정의 된 요소의 목록을 포함하는 클래스를 만들려면 , 예를 들어 영화 목록과 목록을 수정하는 몇 가지 방법 (예 : 새 영화 추가 또는 특정 ID가있는 영화 삭제)이 포함 된 클래스?

+0

코드를 읽을 수 없으므로 수정하십시오. – alexvassel

+0

'__init__' 메소드에서 코드를 수정해야합니다. 의도가 무엇인지 확실하지 않습니다. 들여 쓰기가없는 같은 줄에 여러 문장이 있습니다. –

+1

평범한 오래된 목록이 아직 수행하지 않은'lista' 클래스를 어떻게 하시겠습니까? – wim

답변

6

클래스 메서드와 인스턴스 메서드가 혼합되어있는 것처럼 보입니다.

listarez = lista() 

그리고

listarez.adds(a) 
listarez.printer() 
+2

'listanumere'는 클래스 속성이기 때문에 모든 lista 인스턴스가 같은 목록을 공유한다는 것을 의미하며 이는 OP가 의도 한 바가 아닐 수도 있다는 것을 의미합니다. 문제를 해결하려면'listanumere = []'을 제거하고 대신'self.listanumere = []'를 사용하여'lista'에게'__init__' 메소드를 제공하십시오. –

1

을 짧은 답변 : 당신은 아마하고 싶어 내가 당신이라면

class lista(object): 
    listanumere=[] 
    def printer(self): 
     print "\n".join([ str(elem)for elem in self.listanumere ]) 
    def adds(self,numar): 
     self.listanumere.append(numar) 

class movies(): 
    def __init__(self,ide,nume): 
     self.__nume=nume 
     self.__ide=ide 
    def __str__(self): 
     return ":".join([ str(self.__nume) , str(self.__ide) ]) 


listarez=lista() 
a=movies(1,"David") 
b=movies(2,"Goliath") 

listarez.adds(a) 
listarez.adds(b) 

listarez.printer() 

, 나는 사전도에서 파생 된 클래스와 함께 갈 것입니다 (예 : { 'ID 문자열': 무비 객체}를 오른쪽 오버로드 메서드 (init, str, ..)와 함께 사용합니다. 그렇게하면 itertools 등과 같은 표준 방법을 자유롭게 사용할 수 있습니다.

관련 문제