【问题标题】:Iterable Derived class from file class in Python 2.6Python 2.6中文件类的可迭代派生类
【发布时间】:2019-05-05 16:51:36
【问题描述】:

我有一个解决方法,但我仍在考虑一种更好的方法来实现我的目标。我希望从基类 file 派生的类逐行访问文件,但顺便获取行号。类似于内置 枚举功能。

我觉得这个类应该是这样的:

class file2(file):
  def __init__(self, filename):
    file.__init__(self, filename)
    self._num_line = 0

  def __iter__(self):
    self._num_line = 0
    ?

实现这一点

f2 = file2('myfile.txt')
for num_line, line in f2:
  ...

我目前的选择是在子类中创建一个生成器:

    def lines(self):
        for line in self:
            self._num_line += 1
            yield (self._num_line, line)

但用法很丑(嗯,不像我想要的那样 Pythonic):

f2 = file2('myfile.txt')
gen = f2.lines()
for i, lin in gen:
   ...

有没有简单的方法来实现这一点?提前致谢,

【问题讨论】:

  • Python 2.6??你确定吗?

标签: python file generator enumerate


【解决方案1】:

您的__iter__ 方法可能与def lines(self): 具有完全相同的实现

或者你可以这样做:

def __iter__(self):
    return enumerate(file.__iter__(self))

或许

def __iter__(self):
    return enumerate(super(file, self).__iter__())

注意,我不应该鼓励这样做,因为它违反了 Liskov 替换原则。您的 iter 方法现在返回元组的迭代器,而不是字符串的迭代器。只需在对象本身上使用enumerate。为什么要使用继承?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多