【问题标题】:Creating an empty object with nested attributes in Python在 Python 中创建具有嵌套属性的空对象
【发布时间】:2016-12-09 12:31:25
【问题描述】:

我正在尝试创建一个包含如下嵌套属性的空对象:

form = type('', (), {})()
form.foo.data = ''

但我得到以下属性错误:

>>> form = type('', (), {})()
>>> form.foo.data = ''
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'data'

我应该如何构造对象来完成它?

【问题讨论】:

  • 你想怎么用这个?
  • 那么类构造函数将是来自WTFormsForm 类。但在这种情况下,我只想创建一个只包含这些属性的“假”对象:form.foo.dataform.bar.data 等等。
  • @Navidad20 这是一个测试用例。我需要手动将值分配给这些属性。

标签: python object attributes nested


【解决方案1】:

根据类型函数,第三个参数应该是字典的形式。因此,对于嵌套属性,您可以在其自身之前创建对象,然后在字典中使用它。 这样的事情可能会奏效 -

da = type('',(),{'data':1})    
a = type('',(),{'foo':da}) 

【讨论】:

  • 这种方式看起来不错,但我认为我们有一个“更好”的方式来使用 MagicMock,like in this
【解决方案2】:

我不明白你的意思,但你可以使用namedtuple

>>>from collections import namedtuple

>>>foo = namedtuple('foo', "data tuple dict")
>>>foo.data = ""
''
>>> foo.tuple = ()
>>> foo.tuple
()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多