2013-10-25 12 views
3

두 클래스가 있습니다. MyClass와 MyClass2입니다. MyClass의 경우 파일을 가져 와서 해당 파일의 모든 단어를 반환했습니다. MyClass2에서는 MyClass를 상속 받았으며 기본적으로 사전에 모든 단어를 값의 빈도와 함께 저장하는 코드를 작성했습니다. 첫 번째 클래스는 이미 테스트를 마쳤으며 모든 단어를 반환 할 수있었습니다. MyClass2 나는 올바르게 쓰여졌다 고 생각했지만, MyClass의 권리를 상속받지 못했다고 생각한다. 또는 iter 메서드가 작성된 것입니다. incorreclty. 코드를 실행할 때마다 오류가 반환됩니다. 이것은 숙제이기 때문에 (또한 나는 속임수로 생각하고 싶지 않습니다 ..) 내 질문에 답할 필요가없는 한 모든 코드를 게시하지 않으며 누구에게도 내 코드를 완전히 고치십시오. 그냥 내 생성자가 잘못되었거나 전체 코드가 잘못되었거나 내 코드를 올바르게 포맷하고 클래스를 잘못 상속했는지 여부에 대한 지침이 필요합니다 ...? 저는 파이썬에 익숙하지 않아 도움이 필요합니다. 내가 테스트 코드를 실행하면Python : 객체에 속성이 없습니다.

from myclass import MyClass 
class MyClass2(MyClass): 
     def __init__(self, Dict): #Is the problem within the constructor? 
      self.Dict = Dict 
      Dict = {} 
     def dict(self, textfile): 
      text = MyClass(textfile) #Was I wrong here?? 
      .................. 
       .............. 
       .............. 
       return self.Dict 
     def __iter__(self): 
      for key, value in self.Dict.items(): 
       yield key, value 

, I라는 오류 얻을 :

AttributeError: 'MyClass2' object has no attribute 'items' 

내가 anythign를 놓치고 있다면 알려 나주세요 충분한 정보가없는 경우. 역 추적 여기

filename = MyClass1('name of file') 
y = MyClass2(filename) 
for x in y: 
    print x 

됩니다 :

Traceback (most recent call last): 
File "C:\myclass.py", line 25, in <module> 
    for x in y: 
File "C:\myclass2.py", line 19, in __iter__ 
    for key, value in self.Dict.items(): 
AttributeError: 'MyClass2' object has no attribute 'items' 
+1

'MyClass'에는'items' 속성이 있습니까? – aIKid

+0

DECT가 생성자에 전달되는 tpe는 무엇입니까? 또한 Dict = {}는 당신이 생각하는 것을하지 않을 가능성이 가장 큽니다. 당신이 기대하는 것은 무엇입니까? – grim

+0

다른 곳에서 코드에서 "항목"을 사용하고 있습니까? – Christian

답변

0

귀하의 변수 '이름이 꽤 이상해을

나는 주어진이 코드를 사용하여 테스트했습니다. 나는 그것을 휴식을 취하려고합니다 :

여기
from myclass import MyClass 
class MyClass2(MyClass): 
     def __init__(self, Dict): 
      self.Dict = Dict 
      Dict = {} 
     def __iter__(self): 
      for key, value in self.Dict.items(): 
       yield key, value 

filename = MyClass1('name of file') 
y = MyClass2(filename) 

, filename은 (내가 str 또는 unicode 인의 의심 것) 파일 이름이 아닙니다. 어쩌면 파일 이름을 포함하는 객체 일 수 있습니다. 이름이 MyClass1 인 것은별로 도움이되지 않습니다.

이 개체는 filename에 의해 지정되며 MyClass2.__init__()입니다. 그곳에는 self.Dict이 들어갑니다. 그런 다음 매개 변수 Dict{}으로 설정됩니다. 이는 매우 의미가 없습니다.

아아, 내가 뭘 원하는지 모르겠다. 어쩌면 당신은 무언가를 원할 것입니다

class MyClass2(MyClass): 
     def __init__(self, filename): 
      self.filename = filename 
      self.Dict = {} 
     def __iter__(self): 
      for key, value in self.Dict.items(): 
       yield key, value 

참고 : 소문자로 변수 이름을 지정하는 것이 좋습니다. 그리고 Dict의 이름을 dict으로 변경하지 말고 독자가 의미하는 바가 무엇인지 알 수있는 방식으로 이름을 지정하십시오.

+0

고맙습니다. 그게 실제로 내 실수를 없앴습니다. 테스트 코드를 실행 한 후에 MyClass의 출력을 제외하고는 아무 것도 출력하지 않았습니다. MyClass2는 테스트 코드를 실행 한 후 사전의 키와 값을 인쇄해야했습니다. 이것은 MyClass2의 def __iter __ (self)가 잘못되었거나이 클래스의 다른 곳입니까? – user2918801

+0

@ user2918801 아니요. 잘못된 순서로 일을 한 것이고 무의미한 것도 네 '__init__'였습니다. 지역 변수에 할당하는 것은 여기서 무의미합니다. 사물을 보존하기 위해'self.filename'이나'self.datadict'와 같은'self'의 속성에 할당합니다. – glglgl

관련 문제