AttributeError:无法设置 python 列表属性的属性

2024-01-20

我正在与python-docx来自分叉的库version https://pypi.org/project/bayoo-docx/,并且我在编辑元素列表时遇到问题,因为它被定义为属性。

# docx.document.Document
@property
def elements(self):
    return self._body.elements

我尝试采用提到的解决方案here https://stackoverflow.com/a/34179815/4171008但错误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: can't set attribute

The 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为了这property :

# docx.document.Document

@property
def elements(self):
    return self._body.elements

我还应该添加一个setter为了property:

# 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.elemetns实际上是来自document._body.elements, 我对吗?

任何帮助将不胜感激!


主要的“属性错误”问题,@Jasmijn 已经涵盖了......设置器实际上需要设置一些东西。

关于如何提供 setterelements:

首先我们需要弄清楚在哪里elements来自:

  • Document.elements来自[Document]._body.elements
  • [Document]._body.elements来自_Body,它继承了BlockItemContainer.elements
  • BlockItemContainer.elements动态构建其元素列表[BlockItemContainer]._element.getchildren()
  • [BlockItemContainer]._element等于[Document]._element.body
  • [Document]._element来自延伸ElementProxy,并且是传递给 Document 构造函数的第一个参数

以一种非常迂回的方式,给定element传递给Document, 文件elements源自:element.body.getchildren()。 (追踪查找链有点棘手,但这正是当存在大量抽象或可能较差的面向对象设计时所得到的结果)

现在要追查到底是什么getchildren() does:

  • 看起来像element传递给Document是从包含的oxml package
  • oxml本身就是一个包装器lxml
  • 看起来相关的类实际上是在 Cython 中。据我所知,_Element类是哪里getchildren()最终定义为(etree.pyx)
  • getchildren() calls _collectChildren (apihelpers.pxi),这让您了解如何设置内部元素结构

鉴于根实现是 Cython 将使事情变得复杂,但我发现_Element类实现了一些您可以使用的附加方法,特别是:clear() and extend().

所以一个可能的实现(我已经测试过并且似乎有效):

# inside docx.document.Document
@elements.setter
def elements(self, lst):
    cython_el = self._element.body
    cython_el.clear()
    cython_el.extend(lst)

我在这里不同意@Jasmijn 并说你don't需要提供一个设置器BlockItemContainer同样,因为那是私人课程。

您还可以暴露其他_Element方法直接在Document如果需要的话可以对象,比如clear().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AttributeError:无法设置 python 列表属性的属性 的相关文章

随机推荐

  • 如何在 Android 中注册我的应用程序以打开具有自定义文件类型的电子邮件附件?

    我的应用程序应该处理我的自定义 rmc文件 我的用户将通过电子邮件接收它们 我希望我的应用程序能够打开它们 但理想情况下打开尽可能少的我的应用程序无法处理的其他文件类型 我在 Android 中使用以下意图过滤器 不幸的是无法在 gmail
  • 如何将整数 ArrayList 添加到 MultipartBody

    我有一个整数 ArrayList 需要将其放入 MultipartBody Builder 中 我尝试过使用 addFormDataPart 的不同方法 甚至尝试将 arraylist 转换为 JSONObject 然后将 JSONObje
  • 解析 Xml 时发生 Android 错误 - android.os.NetworkOnMainThreadException

    我收到以下错误 08 18 00 02 19 230 D CLIPBOARD 17993 Hide Clipboard dialog at Starting input finished by someone else 08 18 00 0
  • 使用Excel在PHP应用程序中进行核心分析?

    我认为这确实是一个关于方法的问题 我们有一个来自第三方的核心 Excel 电子表格 它提供了对原始数据的一些复杂分析 原始数据直接来自客户的第二个电子表格 我们希望创建一个基于网络服务器的自动化系统 可以上传原始数据 Excel 文件并进行
  • 有没有办法连接 html 属性中的字符串?

    我正在使用 MVC3 并且想使用分部视图来创建动态 DOM 元素 这是我目前的部分观点 model MVCApp ViewModels TitlesViewModel div class display label Name div div
  • 犰狳安装

    您好 我按照 README txt 的说明将 Armadillo3 0 1 安装在我自己的工作目录 home me package armadillo3 0 1 中 但是当我尝试一个例子时 g I home me package armad
  • 在 OSX 上替换 libstdc++.dylib (4.0) 全局新建和删除运算符

    我正在努力用 XCode 3 2 GCC 4 2 libstdc 4 0 动态版本替换全局 new 和删除运算符 我直接从标题 new 中获取原型并实现它们 它们粘贴在下面 该项目是一个 plugin 因此是一个动态库 该插件必须将分配委托
  • 了解 Python 如何“编译”或“解释”函数对象

    我已阅读以下帖子 但我仍然不确定某些事情 Python编译 解释过程 https stackoverflow com questions 3299648 python compilation interpretation process 为
  • 处理 Ember.js 中的验证错误

    我有一个 Rails 应用程序 为 Ember 前端提供 json 服务 我正在尝试在客户端的表单上显示验证错误 Rails 返回这个 json errors hometown is too long maximum is 64 chara
  • 同时将 AuthorizeAttribute 应用于控制器类和操作

    是否有一种方法可以在具有 Authorize 属性的控制器类的一个操作中忽略 Authorize 属性 Authorize public class MyController Controller Authorize Users I tri
  • 根据添加到主屏幕的 URL 在 Web 应用程序清单中设置 start_url

    我的网站有几个小部分 当用户将网站添加到他们的主屏幕时 我想确保主屏幕图标将他们启动到他们添加到主屏幕时所在的小部分 我可以为每个小节注册不同的清单 但这对于没有页面重新加载的单页应用程序不起作用 我正在考虑将小节存储在 cookie 中
  • 使用 C# 编码波斯语字符串

    我正在开发一个短信应用程序 使用C 对于通过 SMS 网关向客户发送交易警报 即 ATM 交易 的银行 该应用程序工作正常 唯一的问题是编码波斯语文本 它没有正确编码波斯语文本 以下是将波斯语文本编码为 UTF 16 格式的方法 publi
  • 如何从 .pb 转换为 .tflite?

    我使用创建了一个对象检测模型Pytorch然后转换自 pth to onnx进而 pb 但现在我需要将其转换为 tflite适用于 Android 应用程序 怎么做 这是我第一次 input arrays 64 3 224 224 outp
  • 编译Linux内核错误xt_CONNMARK.h

    由于非常具体的原因 我尝试编译 Linux 2 6 32 6 内核 并在内核中内置了多个模块 我已将根文件系统包含在 NFS 上 以尝试通过 LAN PXE 启动我自己的自定义救援 Live CD 在包含 ROOT NFS 所需的依赖项和模
  • 是否可以在不编写新文件的情况下将文本合成语音?

    我想使用 GCP 文本到语音 API 合成文本到语音 几乎我能找到的每个示例都会写入一个新文件 我想在该函数输入文本并通过计算机扬声器读取它时执行此操作 我一直在尝试转换 GCP 上传的代码 表示 你好 世界 我还没有找到一种方法可以在转换
  • 将 SelectSingleNode 与 XPath 结合使用会返回 NULL

    我尝试修改 XML 文件SelectSingleNode 文件的结构是
  • Rails 安装错误:“原子”本机 gem 需要安装构建工具[重复]

    这个问题在这里已经有答案了 我正在我的 Windows 上安装 Rails 3 我安装了最新的 ruby 2 0 0 并更新了 gems 但是当我使用 gem install Rails 安装 Rails 时 成功的消息来了 但最后我发现
  • 自定义字体连字

    我正在使用 Visual Studio Code 我看到所有这些很酷的字体连字 用于双等号和三等号 箭头等 我不禁想知道是否有任何方法可以向字体或 VS Code 添加新的自定义连字 我尝试进行一些网络搜索 但似乎找不到任何内容 例如 当我
  • Ansible 内置 Lineinfile 到 ~/.bashrc

    我对 ansible 比较陌生 所以如果这个问题遗漏了一些东西 我很抱歉 我的目标是添加一行 bashrc使用 ansible 文件 我认为最好的方法是ansible builtin lineinfile module 不幸的是 我已经运行
  • AttributeError:无法设置 python 列表属性的属性

    我正在与python docx来自分叉的库version https pypi org project bayoo docx 并且我在编辑元素列表时遇到问题 因为它被定义为属性 docx document Document property