2013-10-25 6 views
3

У меня есть два класса: MyClass и MyClass2. Для MyClass я взял файл и вернул каждое слово в этот файл. В MyClass2 я унаследовал MyClass и в основном написал код, который должен был хранить все слова в словаре вместе с частотой слов в качестве значений. Первый класс, который я уже тестировал, и он смог вернуть каждое слово. MyClass2 Я думал, что написал правильно, но я думаю, что я не наследую MyClass, или мой . Метод iter написан isreclty. Каждый раз, когда я пытаюсь запустить свой код, он возвращает ошибку. Поскольку это домашнее задание, (Также я не хочу, чтобы меня рассматривали как обмана ..) Я не буду публиковать весь свой код, если не нужно отвечать на мои вопросы, и я не ожидаю, что кто-нибудь перепишет или полностью исправить мой код. Мне просто нужно какое-то руководство относительно того, неправильный конструктор или неправильный код, или если я просто не правильно форматировал свой код и неправильно наследовал класс ...? Я новичок в python, и мне просто нужна помощь.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 

Когда я запускаю тестовый код, я получаю сообщение об ошибке, которая говорит:

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

Что такое tpe - Dict, который передан в конструктор? Также 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 должен был напечатать ключ и значение словаря после запуска тестового кода. Означает ли это, что def __iter __ (self) в MyClass2 является неправильным или это где-то еще в этом классе? – user2918801

+0

@ user2918801 Нет, это был ваш '__init__', который делал что-то не в порядке, а некоторые даже бессмысленно. Назначение локальной переменной здесь бессмысленно; чтобы сохранить вещи, вы назначаете атрибут 'self', такой как' self.filename' или 'self.datadict'. – glglgl

Смежные вопросы