Class 定义 required_arg, *args, **kwargs

Class definition with required_arg, *args, **kwargs

我想使用一个 required_arg 除了 *args,**kwargs 在来自另一个 class 的 class 中。但是目前我没有成功!!! 这段代码:

class PageNumCanvas(canvas.Canvas):
    "For  add \"page number of total\" in each footer."

    def __init__(self, page1, *args, **kwargs):
        "Constructor."
        self.page1 = page1 - 1
        canvas.Canvas.__init__(self, *args, **kwargs)
        self.pages = []

我这样做时的错误信息:canvasmaker = PageNumCanvas(1):

canvas.Canvas.__init__(self, *args, **kwargs)
    TypeError: __init__() takes at least 2 arguments (1 given)

如何使用 page1 参数调用 PageNumCanvas class?

更新 #1:

如果我在 class 的 init 中不使用参数,我没有问题。例如:

>>> from reportlab.pdfgen import canvas
>>> class PageNumCanvas(canvas.Canvas):
...     "For  add \"page number of total\" in each footer."
...     def __init__(self, *args, **kwargs):
...             canvas.Canvas.__init__(self, *args, **kwargs)
...             self.pages = []
... 
>>> canvasmaker = PageNumCanvas(1)
>>> canvasmaker
<__main__.PageNumCanvas instance at 0x7f618195df38>
>>> 

更新 #2: 感谢 goncalopp 的指路,正确的代码是:

class PageNumCanvas(canvas.Canvas):
...     "For  add \"page number of total\" in each footer."
...     def __init__(self, page1, *args, **kwargs):
...             "Constructor."
...             canvas.Canvas.__init__(self, page1, *args, **kwargs)
...             self.page1 = page1 - 1
...             self.pages = []
...             print self.page1
... 
>>> canvasmaker = PageNumCanvas(12)
11
>>> 

您可能正在寻找

canvas.Canvas.__init__(self, page1, *args, **kwargs)

根据示例here,您需要在实例化时提供名称canvas.Canvas()

你的第二个版本没有给你错误的原因是你仍在传递 1 ,它被传递给 Canvas 构造函数,因为你删除了 page1 参数.

为了使其正常工作,您只需输入名称和页码即可:

from reportlab.pdfgen import canvas
class PageNumCanvas(canvas.Canvas):
    "For  add \"page number of total\" in each footer."

    def __init__(self, page1, *args, **kwargs):
        "Constructor."
        self.page1 = page1 - 1
        canvas.Canvas.__init__(self, *args, **kwargs)
        self.pages = []

canvasmaker = PageNumCanvas(1, "Hello.pdf")
print canvasmaker.page1

输出

0