我一直在努力尝试更改报告实验室中的段落样式。我认为问题可能是缺乏对类的理解。如果有人能给我一些指示,那就太棒了。波纹管是我的代码。当我运行它时,我收到错误"调用元类基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()
无需为您调试代码:
__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
(。该类仅用三个参数声明,因此您传递的参数太多了!它只能容忍你传递两个(如果它接受关键字参数,则可能更少(参数,因此当添加self
时__init__()
总共得到三个参数。
当出现这种情况时,通常最好检查它失败的行并确保它看起来正常,然后参考您尝试初始化的类的文档。