[Sqlalchemy-tickets] Issue #3420: LW KeyedTuples have instance dicts (ineffective __slots__) (zzzee
Brought to you by:
zzzeek
|
From: Sebastian B. <iss...@bi...> - 2015-05-14 22:37:27
|
New issue 3420: LW KeyedTuples have instance dicts (ineffective __slots__) https://bitbucket.org/zzzeek/sqlalchemy/issue/3420/lw-keyedtuples-have-instance-dicts Sebastian Bank: ```python import sqlalchemy import sqlalchemy.orm engine = sqlalchemy.create_engine('sqlite://') session = sqlalchemy.orm.Session(engine) result = session.query(sa.func.now())[0] result.__dict__ # should raise AttributeError print('\n'.join('%s\t%s' % (getattr(cls, '__slots__', None), cls) for cls in result.__class__.mro())) # () <class 'sqlalchemy.util._collections.result'> # () <class 'sqlalchemy.util._collections._LW'> # None <class 'sqlalchemy.util._collections.AbstractKeyedTuple'> # None <type 'tuple'> # None <type 'object'> ``` Note that `__slots__` only works if [every class along the mro](https://docs.python.org/2/reference/datamodel.html#slots) spares instance `__dict__`s. `__slots__ = ()` for `sqlalchemy.util._collections.AbstractKeyedTuple` shoud fix this. |