簡體   English   中英

在類內部實例化對象

[英]instantiate object inside of class

我試圖理解為什么我無法訪問在類內部實例化的對象上的方法。 例如,我正在嘗試構建一個利用python-pptx庫的腳本,我想將整個幻燈片創建包裝在一個類中以對其進行抽象,並根據我的配置使其更可重用。

class Builder():

    def __init__(self, template='template.pptx', output_file='out.pptx'):
        self.cust_name = ''
        self.author = ''
        self.job_title = ''
        self.present_date = ''
        self.assessment_type = ''
        self.template = template
        self.agenda = ['Overview','Resources']
        self.outfile = output_file
        self.prs = Presentation('template.pptx') <--- This is what im referring to.

    def addAgendaSlide(self):
        agenda_slide = self.prs.add_slide(self.prs.slide_layouts[AGENDA]) <-- When trying to access this
        agenda_slide.shapes.title.text = 'Agenda'
        agenda_slide.placeholders[10].text = 'A test Agenda slide'
        agenda_slide.placeholders[15].top = STANDARD_TOP
        agenda_slide.placeholders[15].left = STANDARD_LEFT
        agenda_slide.placeholders[15].width = 8229600
        agenda_slide.placeholders[15].height = 4572000
        for para in self.agenda:
            p = agenda_slide.placeholders[15].text_frame.add_paragraph()
            p.text = para

Traceback (most recent call last):
  File "test.py", line 19, in <module>
test.addAgendaSlide()
  File "/dev/pythonpptx/DocMaker/Slides.py", line 89, in addAgendaSlide
agenda_slide = self.prs.add_slide(self.prs.slide_layouts[AGENDA])
AttributeError: 'Presentation' object has no attribute 'add_slide'

如果我在類外使用相同的代碼,則可以正常工作。 我在類中確實有其他方法很好,這似乎是我對Presentation()的實現使我感到困惑。

以下工作正常:

prs = Presentation('template.pptx')
agenda_slide = prs.slides.add_slide(prs.slide_layouts[AGENDA])
agenda_slide.shapes.title.text = 'Agenda'
agenda_slide.placeholders[15].top = STANDARD_TOP
agenda_slide.placeholders[15].left = STANDARD_LEFT
agenda_slide.placeholders[15].width = 8229600
agenda_slide.placeholders[15].height = 4572000
prs.save('out.pptx')

我認為您的問題是您忘記添加slides ,如下所示:

agenda_slide = self.prs.slides.add_slide(self.prs.slide_layouts[AGENDA])

代替

agenda_slide = self.prs.add_slide(self.prs.slide_layouts[AGENDA])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM