Python:对象没有属性

时间:2013-10-25 07:04:53

标签: python

我有两个类:MyClass和MyClass2。对于MyClass,我拿了一个文件并返回该文件中的每个单词。在MyClass2中,我继承了MyClass,并且基本上编写了一个代码,该代码应该将字典中的所有单词以及单词的频率存储为值。 我已经测试的第一堂课,它能够返回每个单词。 MyClass2我以为我写得正确,但我认为我没有正确继承MyClass或我的 iter 方法写得不正确。每次我尝试运行我的代码时,都会返回错误。 由于这是一项家庭作业,(我也不想被视为作弊..)我不会发布我的所有代码,除非有必要回答我的问题,我也不会期待任何人重写或完全修复我的代码。我只是需要一些关于我的构造函数是否错误或者整个代码是否错误的指导,或者我是否只是没有正确格式化我的代码并继承班错了......? 我是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'

如果我遗失任何信息或信息不足,请告诉我。

我使用以下代码测试了它:

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 个答案:

答案 0 :(得分: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不是文件名(我怀疑是strunicode)。也许它是一个以某种方式包含文件名的对象。 (命名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,而是将其命名为读者可以看到它的含义。