我一直在努力改变报告实验室中的段落样式。我认为问题可能是缺乏理解什么是类。如果有人能给我一些很棒的指针。贝娄是我的代码。当我运行它时,我在调用元类库时遇到错误'错误 init ()最多需要3个参数(给定4个)'。
干杯,
罗宾
from reportlab.lib.styles import ParagraphStyle
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import mm
from reportlab.platypus import Paragraph, Frame
Title = 'Test'
c = Canvas(str(Title)+'.pdf')
story = []
file = open('Acknowledgements.txt','r')
lis = []
for line in file:
lis.append(line)
styles = getSampleStyleSheet()
styleN = styles['Normal']
styleH = styles['Heading1']
class ParagraphStyle(styleN):
defaults = {
'fontName':'Helvetica',
'fontSize':14,
'leading':12,
'leftIndent':0,
'rightIndent':0,
'firstLineIndent':0,
'alignment':0,
'spaceBefore':0,
'spaceAfter':0,
'bulletFontName':'Helvetica',
'bulletFontSize':10,
'bulletIndent':0,
'textColor': 'k',
'backColor':None,
'wordWrap':None,
'borderWidth': 0,
'borderPadding': 0,
'borderColor': None,
'borderRadius': None,
'allowWidows': 1,
'allowOrphans': 0,
'textTransform':None,
'endDots':None,
'splitLongWords':1,
'underlineProportion': 0,
'bulletAnchor': 'start',
'justifyLastLine': 0,
'justifyBreaks': 0,
'spaceShrinkage': 0,
}
story.append(Paragraph('Acknowledgements', styleH))
for l in lis:
story.append(Paragraph(l, styleN))
f = Frame(110*mm, 0*mm, 90*mm, 280*mm, showBoundary=0)
f.addFromList(story,c)
c.save()
答案 0 :(得分:0)
无需为您调试代码:
__init__()
是一个类初始值设定项。 (它类似于Java中的New)
这意味着:如果我在某处定义了一个类Foo
,后来又做了a = Foo(param1)
,那么后台发生的事情是Python为该类分配内存然后调用Foo.__init__(self, param1)
,其中self
是该类新分配的内存。
请注意,Python会在参数中插入self
而不会看到它。这意味着Foo.__init__()
技术上收到了两个参数(根据Python和任何追溯),您只需在Foo()
中输入一个参数!对于那些不熟悉Python类的人来说,这可能是一个令人困惑的旅行。
所以在你的情况下,你(或你调用的东西)正在初始化一个类并传递三个参数(IE:a = Foo(1, 2, 3)
)。然后Python传递self
,然后输入您输入到该类__init__()
的参数,以便它接收四个参数(self, 1, 2, 3
)。这个类只用三个参数声明,所以你传递的太多了!它只能容忍你传递两个(或者可能更少,如果它需要关键字args)参数,所以当添加self
时__init__()
得到三个参数。
当出现这种情况时,通常最好检查它失败的线路并确保它看起来没问题,然后参考您尝试初始化的类的文档。