3

我有两个类: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'
4

1 回答 1

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不是文件名(我怀疑它是stror 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只是 do dict,而是以一种读者可以看到它应该意味着什么的方式命名它。

于 2013-10-25T07:33:28.263 回答