我正在尝试使用以下代码在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
?
答案 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.然后打印返回值f
但f
返回None
,这会产生{{1}在输出中。