【问题标题】:How can I modify modules and packages while keeping the original intact?如何修改模块和包,同时保持原件不变?
【发布时间】:2015-12-30 21:16:52
【问题描述】:

我有一个用我的 python 编写的程序,它使用 PyPDF2 包来抓取一批 pdf 文件。这些 PDF 的形状不是最好的,所以为了让我的程序运行,我需要按照本网站的建议修改位于包库中的 pdf.py 文件:

https://cheonhyangzhang.wordpress.com/2015/03/31/python-pdffilereader-pdfreaderror-eof-marker-not-found/

有没有一种方法可以在保持原始文件完整的同时对文件进行此更改?我已经尝试创建 PdfFileReader 类的子类并修改上面链接中规定的“读取”方法,但是,我发现这会导致一些我想避免的导入依赖问题。

有更简单的方法吗?

【问题讨论】:

    标签: python pdf inheritance


    【解决方案1】:

    我建议将pdf.py 文件复制到我们的脚本目录中,并将其重命名为mypdf.py。然后,您可以随意修改副本,而不会影响原件。您可以使用

    导入包
    import mypdf
    

    我为 shutil.py 做了类似的事情,因为 Windows 中的默认缓冲区大小太小,无法传输大文件。

    【讨论】:

      【解决方案2】:

      您可以像这样使用setattr() 添加(或重新定义)类的方法(其中类已被内联定义,而不是仅出于说明目的而导入):

      class Class(object):
          pass
      
      def func(self, some_other_argument):
          return some_other_argument
      
      setattr(Class, 'func', func)
      
      if __name__ == '__main__':
          c = Class()
          print(c.func(42))  # -> 42
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 2019-01-18
        • 2014-10-21
        • 2011-03-24
        相关资源
        最近更新 更多