Вы не можете установить произвольные атрибуты на object
случаях:
>>> a = object()
>>> a.b = 'c'
Traceback (most recent call last):
File "<pyshell#56>", line 1, in <module>
a.b = 'c'
AttributeError: 'object' object has no attribute 'b'
Howver, вы можете создать Generic
класс, который позволит вам:
class Generic(object):
pass
Затем предполагается, что ваш список содержит пары нитей:
l = [[['a', 'b'], ['c', 'd'], ['e', 'f']],
[['g', 'h'], ['i', 'j'], ['k', 'l']]]
вы можете перемещаться по ней следующим образом:
out = []
for ll in l:
obj = Generic()
for attr, val in ll:
setattr(obj, attr, val)
out.append(obj)
В качестве альтернативы, вы можете использовать три-аргумента формы type
создавать произвольные классы, а затем создать экземпляры тех:
out = [type("Generic", (object,), dict(ll))() for ll in l]
Обратите внимание:
>>> dict(l[0])
{'a': 'b', 'c': 'd', 'e': 'f'}
Наконец, если у вас есть реальный (не общий) объект, который требуется, например, a
, c
, e
в качестве аргументов __init__
:
class Actual(object):
def __init__(self, a, c, e):
self.a = a
self.c = c
self.e = e
Вы можете использовать словарь распаковку для создания экземпляра из подсписка например l[0]
:
obj = Actual(**dict(l[0]))
Что * "не работает для меня" * значит, точно? Где ваш код и что именно с ним не так? Действительно ли ваш список (в конце концов) содержит строки или некоторые другие объекты? – jonrsharpe
Да, большая причина, по которой этот вопрос не отвечает в его нынешнем виде, заключается в том, что вы не следовали руководству по отправке кода, который вы на самом деле пытаетесь запустить. – ErlVolton
Вы правы, оба из вас, но скажем, через 3 часа переписывания со многих точек зрения, я не уверен, какую попытку я должен сделать точно ... – Viker