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'
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)
または、 の 3 つの引数形式を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]))