如何解决从导入的库python-pptx扩展类时遇到困难
设置:
- Python 3.6
python-pptx
openpyxl
openpyxl-image-loader
我的目标:
扩展 Presentation 类以包含更多功能以构建独特的 PPT 幻灯片
我不想覆盖之前的任何 __init__()
。
我目前的进展:
我使用 type()
来查看我应该扩展哪个类。
from pptx import Presentation
prs=Presentation('template.pptx')
print(type(prs))
>><class 'pptx.presentation.Presentation'>
然后我创建了一个继承 pptx.presentation.Presentation
的新类:
class Build_ppt(pptx.presentation.Presentation):
def build_cover(self,i,ws):
#i : index
#ws: is an openpyxl instance
pass
然后我尝试调用新的 Build_ppt
类,类似于您调用 Presentation
的方式:
prs=Build_ppt('template.pptx')
我收到以下错误:
TypeError: __init__() missing 1 required positional argument: 'part'
或者有时它确实通过但超类没有传入正确的参数。
解决方法
您通过 Presentation
获得的 from pptx import Presentation
对象与 pptx.presentation.Presentation
不同。
如果您查看 pptx/__init__.py
,您可以看到 from pptx.api import Presentation
。这就是建立您所引用的 pptx.Presentation
的原因。 https://github.com/scanny/python-pptx/blob/master/pptx/__init__.py#L14
如果您查看 pptx/api.py
,您可以看到 Presentation
是一个函数,它执行打开演示文稿 (.pptx) 文档、创建 {{1 }} 对象,并返回该对象。 https://github.com/scanny/python-pptx/blob/master/pptx/api.py#L18
所以 pptx.presentation.Presentation
看起来和行为都像一个类,但它不是。如果您想要自己的 pptx.Presentation
版本,则必须按照 pptx.Presentation
函数而不是它返回的对象对其进行建模。
但是,我不建议您这样做。有很多复杂性,您将完全靠自己,因为从那时起您所做的一切都在“标签外”领域,而不是使用已发布的界面。
你可以做的是组合一个pptx.api.Presentation
对象,然后用“包含”它的类来操作它。
另一种选择是 fork Presentation
并扩展它以适合您的目的。当然,你也是靠自己的方式。
第三种选择是将 python-pptx
用于任何您能做的事情,并编写“扩展”函数来完成 python-pptx
不能直接为您完成的事情。这是一种非常常见的方法,我自己也经常使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。