我正在使用从一个分支版本中获取的python-docx
库进行编程,但是在编辑元素列表时遇到了问题,因为它被定义为属性。
# docx.document.Document
@property
def elements(self):
return self._body.elements
我尝试使用这里提到的解决方案,但是错误AtributeError: can't set attribute
仍然出现。
接下来我尝试将setter
添加到从self._body
派生的属性中,并编辑代码:
# docx.blkcntnr.BlockItemContainer
@property
def elements(self):
"""
A list containing the elements in this container (paragraph and tables), in document order.
"""
return [element(item,self.part) for item in self._element.getchildren()]
我尝试在两个级别中都添加了setter
,但最终又遇到了错误AtributeError: 无法设置属性
我编写的setter
:
@elements.setter
def elements(self, value):
return value
我尝试的实现:
elements_list = docx__document.elements
elem_list = []
docx__document.elements = elements_list = elem_list
这段代码的主要问题是docx__document.elements
仍然包含了所有应该被删除的元素!
编辑库的过程如下:
# Inside docx.document.Document
@property
def elements(self):
return self._body.elements
@elements.setter
def elements(self, value=None):
self._body.elements = value
gc.collect()
return value
另一部分:
# Inside docx.blkcntnr.BlockItemContainer
@property
def elements(self):
"""
A list containing the elements in this container (paragraph and tables), in document order.
"""
return [element(item,self.part) for item in self._element.getchildren()]
@elements.setter
def elements(self, value):
"""
A list containing the elements in this container (paragraph and tables), in document order.
"""
return value
相关问题 [更新]
如果我为这个属性添加了一个setter:
# docx.document.Document
@property
def elements(self):
return self._body.elements
我应该为这个 property
添加一个 setter
吗:
# docx.blkcntnr.BlockItemContainer
@property
def elements(self):
"""
A list containing the elements in this container (paragraph and tables), in document order.
"""
return [element(item,self.part) for item in self._element.getchildren()]
因为document.elements
的值实际上是来自于document._body.elements
,我说得对吗?
非常感谢任何帮助!
elements
getter 返回一个由其子元素组成的对象列表解析(return [element(..) for item in self._element.getchildren()]
)。该 getter 总是从其子元素创建一个新列表,因此将属性“element”本身设置为空列表不能删除子元素。建议查看实例的_element
属性,可能要检查def getchildren()
带你去哪儿。看看用于 创建 列表的内容,而不是列表本身。 - micromoses