Python:标准库中的Override方法

时间:2016-04-24 14:35:02

标签: python python-3.x ftp override

我在Python 3中遇到了ftplib模块的问题,经过一些调试后,我发现了错误:getline()类的FTP方法返回b'somestring'(但作为字符串,而不是字节)而不是somestring。我可以用.decode("utf-8")解决这个问题,替换函数中的第一行

line = self.file.readline(self.maxline + 1)

line = self.file.readline(self.maxline + 1).decode("utf-8")

解决了这个错误。但是现在,我想不要手动编辑文件ftplib.py,而是想在我的代码中覆盖它。但是,当我使用继承自FTP_TLS的{​​{1}}类时,我无法弄明白,该怎么办......

FTP
我的代码开头的

不起作用,因为class FTP: def getline(self): line = self.file.readline(self.maxline + 1).decode("utf-8") ... 无法识别我对FTP_TLS所做的更改。

样品:

FTP

1 个答案:

答案 0 :(得分:2)

首先,它不是ftplib中的缺陷,它通过不假设字节流的编码来做正确的事情。在我之后重复:文件或套接字中的字节不是字符串,直到你解码它们!进一步阅读:

http://www.joelonsoftware.com/articles/Unicode.html

话虽如此,如果你仍然希望monkeypatch ftplib假设编码总是utf-8,你可能会这样做:

from ftplib import FTP

origGetLine = FTP.getline
def assumeUtf8GetLine(*args, **kwargs):
    return origGetLine(*args, **kwargs).decode('utf-8')
FTP.getline = assumeUtf8GetLine