fancy-queen-20734
08/16/2016, 8:22 PMrough-minister-58256
08/16/2016, 8:22 PMrough-minister-58256
08/16/2016, 8:22 PMwitty-crayon-22786
08/16/2016, 8:22 PMwitty-crayon-22786
08/16/2016, 8:23 PMwitty-crayon-22786
08/16/2016, 8:23 PMrough-minister-58256
08/16/2016, 8:23 PMfancy-queen-20734
08/16/2016, 8:24 PMwitty-crayon-22786
08/16/2016, 8:25 PMfancy-queen-20734
08/16/2016, 8:25 PMrough-minister-58256
08/16/2016, 8:25 PM__slots__
is pretty amenable to serializationrough-minister-58256
08/16/2016, 8:26 PMrough-minister-58256
08/16/2016, 8:26 PMwitty-crayon-22786
08/16/2016, 8:26 PMwitty-crayon-22786
08/16/2016, 8:26 PMwitty-crayon-22786
08/16/2016, 8:27 PMrough-minister-58256
08/16/2016, 8:28 PMrough-minister-58256
08/16/2016, 8:32 PM__slots__
might be the best/most tame approachrough-minister-58256
08/16/2016, 8:32 PMrough-minister-58256
08/16/2016, 8:35 PMrough-minister-58256
08/16/2016, 8:49 PMrough-minister-58256
08/16/2016, 8:49 PM>>> import itertools
>>> def datatype(type_name, params):
... class DataType(object):
... __slots__ = tuple(params)
... def __init__(self, *args):
... assert len(args) == len(params), 'invalid input'
... for kw, v in itertools.izip(params, args):
... setattr(self, kw, v)
... DataType.__name__ = type_name
... return DataType
...
>>> RustLibrary = datatype('RustLibrary', ['sources', 'dependencies'])
>>> rl = RustLibrary([1,2,3], [4,5,6])
>>> rl.sources
[1, 2, 3]
>>> rl.dependencies
[4, 5, 6]
>>> rl.__slots__
('sources', 'dependencies')
>>> rl.__dict__
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'RustLibrary' object has no attribute ‘__dict__’
>>> isinstance(rl, RustLibrary)
True
fancy-queen-20734
08/16/2016, 8:51 PMfancy-queen-20734
08/16/2016, 8:52 PMrough-minister-58256
08/16/2016, 8:53 PMrough-minister-58256
08/16/2016, 8:53 PMfancy-queen-20734
08/16/2016, 8:56 PMfancy-queen-20734
08/16/2016, 8:57 PMfancy-queen-20734
08/16/2016, 8:57 PMrough-minister-58256
08/16/2016, 8:58 PM>>> f = datatype('Foo', ['1'])
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 2, in datatype
TypeError: Error when calling the metaclass bases
__slots__ must be identifiers