为什么我班的p.length()会返回None?

时间:2016-07-08 08:19:52

标签: python python-2.7

我正在尝试使用以下代码在Python中动态地向类添加方法:

class SomeClass():

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __len__(self):
        return len(self.name)

p = SomeClass("Bob", 22)

def f(v):
    print len(v)

SomeClass.length = f

print p.length()

由于len()函数依赖于参数中使用的对象的__len__方法,我期望输出为:

3

但是,我得到的输出为:

3
None

为什么输出中有None

3 个答案:

答案 0 :(得分:2)

您没有从using (MemoryStream ms = new MemoryStream()) { PdfWriter outputWriter = PdfWriter.GetInstance(newPDF, ms); newPDF.Open(); PdfContentByte cb1 = outputWriter.DirectContent; for (int pagesToAddFromSourcePDFToNewPDF = 0; pagesToAddFromSourcePDFToNewPDF < soa_total_pages; pagesToAddFromSourcePDFToNewPDF++) { if (pagesToAddFromSourcePDFToNewPDF > 0) { currentPageInSourcePDF++; } newPDF.NewPage(); PdfImportedPage page = outputWriter.GetImportedPage(sourcePDF, currentPageInSourcePDF); cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } filesCreated++; // Upload stream to AWS ms.Position = 0; using (var transferUtility = new TransferUtility(client)) { transferUtility.Upload(ms, "mybucketname", "1/soa/" + newPDFFilename); // ERROR IS THROWN HERE } newPDF.Close(); } 返回任何内容。因此默认情况下会返回f。执行None时,print p.length()实际打印长度并返回p.length,这就是要打印的内容。

相反,只需从None返回长度。

f

答案 1 :(得分:1)

您的函数f 打印长度,然后不返回,即None,并且打印 f返回print p.length()的任何内容。如果您只想输出3,那么 f更改为

def f(v):
    return len(v)  # return instead of print

将呼叫更改为f

p.length()  # without the print

答案 2 :(得分:1)

f打印名称的长度,产生3.然后打印返回值ff返回None,这会产生{{1}在输出中。