Skip to content

Commit a987f30

Browse files
object.meta.__new__: put inner meta options class back in clsattrs after class creation
1 parent 7ee2dba commit a987f30

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

modeled/object.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,18 @@ def __new__(mcs, clsname=None, bases=None, clsattrs=None, **kwargs):
5959
metabases = tuple(type(b) for b in bases) # if type(b) is not mcs)
6060
if not any(issubclass(mb, mcs) for mb in metabases):
6161
metabases = (mcs, ) + metabases
62-
try:
63-
metabases = (clsattrs.pop('meta'), ) + metabases
64-
except KeyError:
65-
pass
62+
meta = clsattrs.pop('meta', None)
63+
if meta:
64+
metabases = (meta, ) + metabases
6665
## if metaattrs: # Implicitly derive a new metaclass:
6766
mcs = type(clsname + '.type', metabases, metaattrs)
6867

6968
mcs.Exception = type('%s.Exception' % clsname, (Exception, ), {})
7069

71-
return base.type.__new__(mcs, clsname, bases, clsattrs)
70+
cls = base.type.__new__(mcs, clsname, bases, clsattrs)
71+
if meta:
72+
clsattrs['meta'] = meta
73+
return cls
7274

7375
def __init__(cls, clsname, bases, clsattrs):
7476
"""Finish a :class:`modeled.object`-derived `cls`.

0 commit comments

Comments
 (0)