【发布时间】:2021-09-25 13:46:53
【问题描述】:
设置:
- Python 3.6
python-pptxopenpyxlopenpyxl-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'
或者有时它确实通过了,但超类没有传入正确的参数。
【问题讨论】:
-
无法在模块中扩展类是很常见的,尤其是那些用其他语言(如 C/C++)编写的类。一种解决方法是定义一个“代理”类,该类具有要在其中扩展而不是从其中派生的类的实例。代理类的方法委托调用这个实例可能有这样的预处理和/或后处理。 my answer 中有一个针对不同问题的简单示例。另请参阅 Wikipedia 的 Proxy pattern 文章。
标签: python class inheritance python-3.6 python-pptx